我创建了一个导出COM组件的C#程序集。我试图像这样在C ++中使用它:
#include "stdafx.h"
#import <mypath\WCFClient.tlb> named_guids raw_interfaces_only
using namespace WCFClient;
int main()
{
CoInitialize(NULL);
IWCFClientPtr pWCFClient;
HRESULT hRes = pWCFClient.CreateInstance(CLSID_WCFCOMClient);
... etc ...
}
CreateInstance正在返回REGDB_E_CLASSNOTREG Class not registered
。
1)我的C#程序集设置为x86编译,我的C ++应用程序设置为Win32编译,虽然我也尝试过x64。
2)我可以看到我的CLSID HKCR \ WOW6432Node \ CLSID(或尝试x64时为HKCR \ CLSID)。装配信息和路径是正确的。
3)生成的.tlh文件中的CLSID_WCFCOMClient是正确的。它是我在注册表中找到的CLSID。
在编译C ++应用程序之前,我正在运行regasm WCFClient.dll /codebase /tlb:WCFClient.tlb
,这是我正在编译的位数的合适的,虽然这是不必要的,因为C#项目在构建时注册自己。它记录了适当的位数。
我有什么遗漏的吗?