我已经尝试使用 COM 来执行此操作,但是每次,我都允许运行此行:
ICalculatorPtr pICalc(__uuidof(ManagedClass));
此行中断了我的C ++函数调用它。 我知道Microsoft Article是为C ++客户端控制台应用程序制作的,但是 COM 方法不应该为C ++ DLL 工作吗?
仅供参考,C ++ DLL 正在在运行时导入到另一个程序中。 (主要应用程序的设计)。
是在我的 Visual Studio解决方案中制作三个项目的唯一方法:C#.net DLL
,C++/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加载到客户端应用程序中的情况。
答案 0 :(得分:0)
我发现了这个问题,我没有在RegAsm.exe cmd中正确注册DLL。一旦成功,COM将可以正常工作。我想我使用的是32位而不是64位的Visual Studio CMD线条工具。