2011-12-15 143 views
0

我有一个C++ DLL,带有100多个导出函数,我想转换成OCX文件。不过,我只知道如何从一个OCX驻留在主类(称为CmyCtrl通过在Visual Studio 10 ActiveX控件向导)做这个中导出函数...:如何从不在主类中的ActiveX控件(.ocx)导出函数?

BEGIN_DISPATCH_MAP(CmyCtrl, COleControl) 
    DISP_FUNCTION_ID(CmyCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE) 
END_DISPATCH_MAP() 

,并使用相应的IDL定义。

我并不热衷于重构整个大型项目,并将每个函数定义(遍布20个左右的文件)移动到类中。我是否可以从OCX中导出函数(完全支持VB6中的Intellisense等,其中将使用控件),这些不在课堂上?我该怎么做,我必须记住什么?

+0

当然,你想将它转换成一个DLL(不是OCX) - 它将必须是一个ActiveX DLL,如果你想使用VB6 – 2011-12-15 17:21:02

+0

我其实是指一个OCX文件。这实际上是一个COM DLL,只是一个不同的扩展。我之前完成了这个工作,它对VB6很有用。我只是不太了解内部,所以我必须使用向导生成的模板。 – 2011-12-15 17:42:20

回答

1

你应该有一个向导来添加一个新的“ATlObject”,这意味着通过COM创建一个可实例化的ne类。有了这个,你可以将你的功能分成不同的类。假设你有一个ATLproject,添加一个新的类时,此向导应该出现: enter image description here

通过创建你有古典COM方式导出函数另一个类一个新的ATL简单对象。如果你想要,你总是可以用dllexport导出一个函数,但在这种情况下,你不能使用COM来与你的组件进行接口。你甚至可以调用与DLL(OCX)的导出函数的常规方式使用策略:

Private Declare Function MyFuncName Lib "yourocx.ocx" ([.. parameters]) As [Return type] 

,但它可能不是你的情况的路要走。