• 图文并茂 简单 ATL COM开发(转)


    转自http://www.cnblogs.com/xiaokang088/archive/2011/05/16/2047376.html

    1.打开vs2010,新建ATL COM 项目,如下图1

     

    2.勾选 【支持COM+ 1.0】和【支持部件注册器】

     

    3 添加了一个com项目,在项目名称上点击右键,添加类,如下图

     

    然后打开如下窗口,选择ATL简单对象即可。

     

    然后是如下窗口,在简称一栏中输入类名称FirstClass,其他输入框会自动填写,然后点击完成即可。如果出现提示【是否覆盖现有文件】,点击【是】即可。

     

    4.切换到类视图(视图->类视图),选中刚才添加的接口IFirstClass,如下,然后右键单击【添加】à添加方法。

     

    打开了添加方法向导,如下,输入方法名【Add】,在下方增加参数。

    先增加两个输入参数:勾选【in】,选择参数类型LONG,输入参数名para1,点击添加。同样操作增加参数para2.

    然后增加一个返回参数:勾选【retval】,选择参数类型LONG*,输入参数名result,点击添加。

     

    点击完成即可。如果点击下一步,打开如下窗口,如果不需要填写信息,点击完成即可。

     

    5.切换到解决方案资源管理器,打开IDL定义文件 FirstCom.idl,看到如下代码,就是定义的COM方法了。

    interface IFirstClass : IDispatch{

             [id(1)] HRESULT Add([in] LONG para1, [in] LONG para2, [out,retval] LONG* result);

    };

    [

             uuid(77067637-4F17-4CBB-A12B-28979A8D21FB),

             version(1.0),

             custom(a817e7a1-43fa-11d0-9e44-00aa00b6770a,"{CB407CA1-C9ED-4A94-B505-91212F94FCED}")

    ]

    6. 打开FirstClass.cpp 编辑方法逻辑如下:

     

    // FirstClass

    STDMETHODIMP  CFirstClass::Add(LONG para1, long para2, LONG* result)

    {

             // TODO: 在此添加实现代码

             *result = para1 + para2;

             return S_OK;

    }

     

    7.至此,完成了COM编写,编译为dll,并自动注册到系统中。下面来调用一下刚才编写的COM,打开一个WPF项目,在项目文件上右击,选择【添加引用】,打开添加引用对话框,切换到COM选项卡,发现我们编写的COM已经在这里了,点击确定即可。

     

    如果在COM选项卡里面没有看到,请使手工注册COM DLL,打开cmd,然后用Regsvr32注册。打开WPF项目的引用文件夹,如下,刚才添加的引用已经在这里了。

     

    8. 使用WPF程序调试COM,编写代码如下:

    public partial class MainWindow : Window

        {

            public MainWindow()

            {

                InitializeComponent();

                FirstComLib.FirstClassClass firstClass = new FirstComLib.FirstClassClass();

                int ret = firstClass.Add(1, 5);

            }

        }

    测试发现,ret=6,调试成功~!

  • 相关阅读:
    gets_s()函数的参数太少,strcpy_s():形参和实参 2 的类型不同,等c函数在Visual Studio上出现的问题, get()函数和scanf()读取字符串的区别,栈的随机性
    线性表的顺序存储实现
    汉诺塔问题, 用递归方法求集合中的中位数
    共用体union
    洛谷3384:【模板】树链剖分——题解
    BZOJ4196:[NOI2015]软件包管理器——题解
    BZOJ3140:[HNOI2013]消毒——题解
    BZOJ1059:[ZJOI2007]矩阵游戏——题解
    洛谷4277:萃香的请柬——题解
    BZOJ1854:[SCOI2010]连续攻击游戏——题解
  • 原文地址:https://www.cnblogs.com/zlintokyo/p/2169654.html
Copyright © 2020-2023  润新知