使用 CoCreateInstance 从C++调用 C# dll
本文关键字:dll 调用 C++ CoCreateInstance 使用 | 更新日期: 2023-09-27 18:20:01
My ProjectA 一个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
文件,到目前为止还好。
我的项目B是一个具有单个cpp
文件的Win32 Dll
应用程序:
#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
.......
我能够编译这个 Dll,直到现在一切看起来都很好。
当我使用我的Win32 Dll并尝试调用Add函数时出现问题这一行:
SUCCEEDED (spCoClass.CoCreateInstance(L"myLib.CsClas"))
永远不会通过,可能有什么问题,它没有正确注册吗?
请协助。
编写的代码没有提供诊断故障的好方法。 改为这样写:
HRESULT hr = spCoClass.CoCreateInstance(L"myLib.CsClas");
if (SUCCEEDED(hr)) {
// etc..
}
一个常见的错误代码0x80040154"类未注册"。 诸如此类。