创建一个C++DLL以从C#DLL调用方法
Create a C++ DLL to Call a Method from a C# DLL
我已经尝试过使用COM来执行此操作,但每次都允许运行以下行:
ICalculatorPtr pICalc(__uuidof(ManagedClass));
这一行打断了调用它的C++函数。我知道Microsoft文章是为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。
我发现了这个问题,我没有在RegAsm.exe cmd中正确注册DLL。一旦成功,COM将正常工作。我想我使用的是32位Visual Studio CMD行工具,而不是64位。
相关文章:
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 从C++dll访问C#中的一行主要参数
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL
- 将 **float array 从 C++ Dll 传递给 python
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- Log4net,将日志消息从 c++ dll 发送到 c# 应用程序?
- 发出信号以从线程更新 UI
- 从 C#-DLL 调用函数的 C++ 失败
- 在 MySQL 中运行 HTTP 服务器以从客户端接收数据
- 从C++调用dll实现的JNI
- 创建一个C++DLL以从C#DLL调用方法
- 正在从jvm.dll获取FindClass函数指针
- 无法使用c++/cli包装从c#dll加载函数
- C++模板以从成员变量或成员函数中读取值
- 循环以从字符数组中删除过多的空格 (C++)
- 如何将多个 cv::Mat 从 c++ dll 传递到 opencvsharp Mat c#?
- 创建程序以从给定的.txt文件中查找文本,替换并计算单词
- 抑制回声以从 cin 中取出
- 有没有办法将 getline() 与外部文本文件一起使用,然后重新获得 cin 的控制权以从控制台获取输入?
- 打包 OpenCV DLL 以分发C++ DLL