从C+调用C#dll+;使用CoCreateInstance
MyProjectAa从C+调用C#dll+;使用CoCreateInstance,c#,c++,com,comvisible,C#,C++,Com,Comvisible,MyProjectAaC类库,包含一个类: namespace myLib { // Interface declaration. [Guid("Some GUID")] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface ICsClass { [DispId(1)] int Add(int Number1, int Number2);
C
类库,包含一个类:
namespace myLib
{
// Interface declaration.
[Guid("Some GUID")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ICsClass
{
[DispId(1)]
int Add(int Number1, int Number2);
};
[Guid("Some GUID")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("myLib.CsClas")]
public class CsClas : ICsClass
{
public int Add(int a, int b)
{
return a + b;
}
}
}
我已经使用VS2010
检查了Register for com interop
,它为我生成了dll
和tlb
文件,直到现在还可以
MyProjectBaWin32 Dll
应用程序,带有单个cpp
文件:
#import "MyLib.tlb" raw_interfaces_only
using namespace MyLib;
#ifdef __cplusplus
extern "C"{
#endif
__declspec(dllexport) long Add(int a,int b)
{
CoInitialize(NULL);
long lResult = 0;
// Use Smart pointer
CComQIPtr <ICsClass> spCoClass;
if (SUCCEEDED (spCoClass.CoCreateInstance(L"myLib.CsClas")))
{
spCoClass->Add(a,b,&lResult);
wprintf(L"The result is %d\n", lResult);
std::cout << "#"+lResult << '\n';
}
CoUninitialize();
return lResult;
}
#ifdef __cplusplus
}
#endif
从未通过,可能是什么问题,它没有正确地重新注册吗
请提供帮助。编写的代码无法为您提供诊断故障的好方法。改为这样写:
HRESULT hr = spCoClass.CoCreateInstance(L"myLib.CsClas");
if (SUCCEEDED(hr)) {
// etc..
}
常见错误代码为0x80040154,“未注册类”。等等。你从CoCreateInstance得到了什么hresult?有错误消息吗?@MatthewWatson:根本没有错误消息。@doctorlove:Which
hresult
?@user1042031他是指CoCreateInstance()的返回值是的,我得到了相同的错误:0x80040154
。。。但我可以在注册表中看到我的GUID?我知道了,我必须为64位构建并注册com,因为我调用的Dll是64位的。
HRESULT hr = spCoClass.CoCreateInstance(L"myLib.CsClas");
if (SUCCEEDED(hr)) {
// etc..
}