创建一个C++DLL以从C#DLL调用方法

Create a C++ DLL to Call a Method from a C# DLL

本文关键字:以从 C#DLL 调用 方法 C++DLL 一个 创建      更新时间:2023-10-16

我已经尝试过使用COM来执行此操作,但每次都允许运行以下行:

ICalculatorPtr pICalc(__uuidof(ManagedClass));

这一行打断了调用它的C++函数。我知道Microsoft文章是为C++客户端控制台应用程序编写的,但COM方法不应该适用于C++DLL吗?

仅供参考,C++DLL正在运行时导入到另一个程序中。(主要应用程序的设计(。

是在我的Visual Studio解决方案中创建三个项目的唯一方法:C#.net DLLC++/CLI managed.DLL,然后是C++ Native.DLL

我在com错误中添加了一个陷阱:

try {
ICalculatorPtr myvalue(__uuidof(ManagedClass));
}
catch (_com_error &e)
{
// Crack _com_error
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
std::ofstream out("C:\Samples\output.txt");
out << "Error 1: " << e.Error() << "n" ;
out << "Error 2: " << e.ErrorMessage() << "n";
out << "Error 3: " << (LPCTSTR)bstrSource << "n";
out << "Error 4: " << (LPCTSTR)bstrDescription << "n";
out.close();
}

输出为

错误1:-2147221164错误2:00000272EED86F40错误3:0000000000000000错误4:0000000000000000

此代码是未注册的类。

我确实在注册表中注册了C#.dll。RegAsm.exe ManagedDLL.dll/tlb:ManagedDLL.tlb/codebase

这些代码都可以与C++控制台应用程序一起使用,但不能作为加载到客户端应用程序中的C++DLL。

我发现了这个问题,我没有在RegAsm.exe cmd中正确注册DLL。一旦成功,COM将正常工作。我想我使用的是32位Visual Studio CMD行工具,而不是64位。