gpt4 book ai didi

c# - 使用 CoCreateInstance 从 C++ 调用 C# dll

转载 作者:行者123 更新时间:2023-11-30 04:17:04 27 4
gpt4 key购买 nike

我的 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,它为我生成了 dlltlb 文件,好的直到现在。

我的 ProjectB 是一个 Win32 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

.......

我能够编译这个 Dll,直到现在一切看起来都正常。

当我使用 Win32 Dll 并尝试调用 Add 函数时出现问题这一行:

 SUCCEEDED (spCoClass.CoCreateInstance(L"myLib.CsClas"))

从未通过,可能是什么问题,没有正确注册吗?

请提供帮助。

最佳答案

所编写的代码并未提供诊断故障的好方法。改为这样写:

    HRESULT hr = spCoClass.CoCreateInstance(L"myLib.CsClas");
if (SUCCEEDED(hr)) {
// etc..
}

一个常见的错误代码是 0x80040154,“类未注册”。等等。

关于c# - 使用 CoCreateInstance 从 C++ 调用 C# dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17317665/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com