Visual c++ ActiveX/IDL–;如何从导出成员函数;“ATL简单对象”;在OCX控制中?

Visual c++ ActiveX/IDL–;如何从导出成员函数;“ATL简单对象”;在OCX控制中?,visual-c++,activex,atl,idl,Visual C++,Activex,Atl,Idl,我在MSVC++10中有一个ActiveX控件,可以编译成.ocx。我已经向这个控件添加了另一个“ATL简单对象”,我想从中导出一些函数 如果此库被称为OcxTest,则必须执行以下步骤才能导出函数: 将函数声明为文件OcxTestCtrl.h中类COcxTestCtrl(由项目向导生成)的受保护成员 定义OcxTestCtrl.cpp中的函数 将其添加到OcxTestCtrl.cpp中的调度映射中: BEGIN_DISPATCH_MAP(COcxTestCtrl, COleControl)

我在MSVC++10中有一个ActiveX控件,可以编译成.ocx。我已经向这个控件添加了另一个“ATL简单对象”,我想从中导出一些函数

如果此库被称为
OcxTest
,则必须执行以下步骤才能导出函数:

  • 将函数声明为文件OcxTestCtrl.h中类
    COcxTestCtrl
    (由项目向导生成)的受保护成员

  • 定义OcxTestCtrl.cpp中的函数

  • 将其添加到OcxTestCtrl.cpp中的调度映射中

  • BEGIN_DISPATCH_MAP(COcxTestCtrl, COleControl)
         DISP_FUNCTION_ID(COcxTestCtrl, "Test", 1, Test, VT_I4, VTS_I4 VTS_I4)
    END_DISPATCH_MAP()
  • 在以下位置将其添加到OcxTest.IDL中的IDL

  • [ uuid(...), version(1.0),  control ]
        library OcxTestLib {
        importlib(STDOLE_TLB);
        [ uuid(...) ]
        dispinterface _DOcxTest {
            properties:
            methods:
                [id(1)] int Test(int x, int y);
    };
    现在,我有点不知道我在哪里定义了我添加到项目中的另一个“ATL简单对象”的导出。我想前两个步骤与我写的类似。其他两步呢

  • 调度映射的定义是否与主对象的定义完全类似?

  • 我必须将导出的函数放在IDL的何处?


  • 你试图用手来做这件事会给自己带来麻烦。函数不会在COM服务器中导出。使用向导使一切正常。右键单击类视图窗口中的接口,添加,添加方法。您可能需要重新开始,以避免手动输入的代码造成痛苦。好的,谢谢您指出向导。(事实上,它每次都会冻结,因为我可能对IDL做了太多的更改,但我能够在一个新项目中使用它来查看它的功能。因此,我的问题得到了回答。)