2011-12-15 18 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] 

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