我有一个包含100多个导出函数的C ++ DLL,我想将其转换为OCX文件。但是,我只知道如何从位于主类中的OCX导出函数(通过Visual Studio 10 ActiveX控件向导调用CmyCtrl)......通过这样做:
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 :(得分:1)
你应该在某个地方添加一个新的“ATlObject”,这意味着创建一个可通过COM实例化的ne类。有了这个,你可以在不同的类中分割你的功能。假设您有一个ATL项目,在添加新类时,该向导应该出现:
通过创建一个新的ATL简单对象,您可以使用经典COM方式创建另一个具有导出函数的类。如果需要,您始终可以使用dllexport导出函数,但在这种情况下,您无法使用COM与组件进行交互。您甚至可以使用策略调用以常规方式使用dll(ocx)导出的函数:
Private Declare Function MyFuncName Lib "yourocx.ocx" ([.. parameters]) As [Return type]
但这可能不适合你的情况。