我試圖將一個LabView程序移植到C++,並且OLE調用它包含給我一些麻煩。 (LabView將此表達式稱爲「ActiveX類」),然後調用在接口中找到的方法QA,即「自動化打開」,即獲取對接口「XLib.XInterface」的引用最後再次關閉參考。我認爲LabView從類型庫的接口獲取它的信息,但我並不確定。C++的OLE自動化問題 - 「類未註冊」
我試着去適應用於Word自動化一些代碼,我發現:http://www.codeproject.com/KB/office/MSOfficeAuto.aspx
CoInitialize(NULL);
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"XConfig.XInterface", &clsid);
IDispatch *pWApp;
if(SUCCEEDED(hr))
{
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER,
IID_IDispatch, (void **)&pWApp);
}
// etc.
該計劃是成功的仰視CLSID,但CoCreateInstance的失敗,聲稱類沒有註冊。我也嘗試直接從類型庫中輸入CLSID,繞過CLSIDFromProgID,但產生相同的結果。不用說,LabView程序工作正常,並且我使用的C++代碼在使用progID「Word.Application」時創建Word實例時沒有任何問題。有問題的接口看起來是這樣的:
[
odl,
uuid(33AAA2DA-70EB-48EE-ACA7-DD0D1F5CAF2D),
helpstring("XInterface Interface"),
dual,
oleautomation
]
interface XInterface : IDispatch {
[id(0x00000001), helpstring("method QA")]
HRESULT QA();
[id(0x00000002), helpstring("method LoadFromDisk")]
HRESULT LoadFromDisk();
...
正如你可能已經注意到,OLE是一種新的給我(最有可能的,這就是問題的一部分)。任何提示將不勝感激。謝謝。
查找其中的LabView COM組件是從DLL,並從該文件夾類型的命令提示'REGSVR32 LabViewDLLName.dll'(用LabView的DLL的實際名稱替換明顯,當然)。這將爲自動化類創建正確的註冊表信息。 –
使用SysInternals的ProcMon實用程序可以準確找出您的程序在註冊表中的位置以及此DLL可能具有的依賴關係。 –