我试图将一个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可能具有的依赖关系。 –