• VS2012创建ATL工程及使用MFC测试COM组件


    一、创建ATL工程

    1、创建ATL项目,取名为ATLMyCom

    2、在ATL项目向导中,勾选【支持MFC】(利用MFC测试用)、【支持 COM+ 1.0】,其余的选项默认,点击完成。

    3、右键工程名称,选择添加类,接下来选择【ATL简单对象】。

    4、在【ATL简单对象向导】对话框中填入自己定义的类名,然后直接点击完成。

    5、切换到类视图,为刚刚添加的接口IMyATLClass添加方法

    6、现在来添加2个方法,分别用来计算两个数之和和弹出MFC对话框,填写方法名务必确定in(输入)还是out(输出) 返回指针要是retval。

     

    7、切换到【解决方案资源管理器】,在ATLMyCom.idl文件中可以看到Sum和PopupDialog的定义。

     8、打开MyATLClass.cpp,实现添加的两个方法。

    STDMETHODIMP CMyATLCLass::Sum(LONG param1, LONG param2, LONG* pVal)
    {
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
        // TODO: Add your implementation code here
        *pVal = param1 + param2; 
        return S_OK;
    }
    
    
    STDMETHODIMP CMyATLCLass::PopupDialog(CHAR* pstr)
    {
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
        // TODO: Add your implementation code here
    


        CString str(pstr);
        AfxMessageBox((LPCTSTR)str);

    return S_OK;
    }

    9、Build该工程,得到ATLMyCom.dll并在注册表中注册。

    二、测试ATL组件

    1、在上面的工程中添加测试项目。

    2、添加用于测试的MFC工程TestATL。

    3、运行MFC应用程序向导,为简单起见,选择对话框工程,其余默认,点击完成。

    4、将生成的对话框中【确定】修改为Sum、【取消】按钮修改为PopupDialog。

    5、双击上面的按钮,在系统生成的函数里删除掉代码CDialogEx::OnBnClickedSum;如下。

    void CTestATLDlg::OnBnClickedSum()
    {
        // TODO: Add your control notification handler code here
    }
    
    
    void CTestATLDlg::OnBnClickedPopup()
    {
        // TODO: Add your control notification handler code here
    }

    6、在TestATL工程中引入由MyATL工程中生成的“ATLMyCom_i.h”、“ATLMyCom_i.c”(这个文件主要用来查看CLSID_MyATLClass和IID_IMyATLClass的值),并在TestATLDlg.cpp中添加ATLMyCom_i.h的引用。

    #include "..ATLMyComATLMyCom_i.h"
    #include "..ATLMyComATLMyCom_i.c"

    7、实现Sum按钮的响应方法。

    void CTestATLDlg::OnBnClickedSum()
    {
        // TODO: Add your control notification handler code here
        HRESULT hr = S_OK;  
        hr = CoInitialize(NULL);

         IMyATLClass* pMyATLClass = NULL;
         hr = CoCreateInstance(CLSID_MyATLCLass, NULL, CLSCTX_INPROC_SERVER,__uuidof(IMyATLCLass), (void **)&pMyATLClass);

    
    

         int sum = 0;
         pMyATLClass->Sum(2, 3, (LONG*)&sum);
         CString str;
         str.Format(L"%d",sum);
         AfxMessageBox((LPCTSTR)str);

         pMyATLClass->Release();

         CoUninitialize();  

    }
    
    
    void CTestATLDlg::OnBnClickedPopup()
    {
        // TODO: Add your control notification handler code here
        HRESULT hr = S_OK;
        hr = CoInitialize(NULL);
       
       IMyATLClass* pMyATLClass = NULL; 
       hr = CoCreateInstance(CLSID_MyATLCLass, NULL, CLSCTX_INPROC_SERVER,__uuidof(IMyATLCLass), (void **)&pMyATLClass); pMyATLClass
    ->PopupDialog("test ATL"); pMyATLClass->Release(); CoUninitialize(); }

     运行测试:

    COM组件编译选项(保证在第三方电脑上没有VS运行环境也能正常运行)

    测试工程:

    结果:

        

    VS2012创建ATL工程及使用C++测试COM组件

  • 相关阅读:
    js 鸭式辨型法
    javascript performence
    js继承实现
    js深入理解构造函数和原型对象
    js 变量类型
    JS 严格模式
    鼠标滚动事件
    css3-transform
    js.map error
    canvas(一) 基本线条绘制
  • 原文地址:https://www.cnblogs.com/chechen/p/8119018.html
Copyright © 2020-2023  润新知