将数据从c++传递到c#
Passing Data From C++ to C#
我正在考虑开发一个c#应用程序,需要从遗留的非托管c++应用程序中调用。c#应用程序将创建一个Winforms或WPF窗口(仍在研究使用哪个),其中有第三方控件。首先,我研究了使用c++/CLR包装器类来调用它,然后使用COM互操作。在将第三方控件添加到表单之前,这两种方法都很好。制作此控件的公司声明,当从非托管c++调用时,他们将不支持他们的产品。
我现在正在考虑替代方案,其中c#应用程序是一个独立的应用程序,然后我可以通过socket或类似的方式从c++应用程序传递数据。
我想知道是否有人能推荐最好的方法来做这件事。我考虑过套接字或内存映射文件。我不确定什么是最好的方法,或者是否有更好的方法。
根据我的经验,从c#通过c++/CLI包装器调用c++代码要比其他方式容易得多。我会尝试从c#应用程序中编写一个活动请求程序,通过c++/CLI包装器向c++代码请求信息。
谁消费数据或谁负责生产数据并不重要。这只是构造调用的问题
c++代码
bool do_you_have_something_for_me();
void get_data_from_cpp_code(HugeStructure &response);
c++/CLI代码
ref class Wrapper
{
public bool waitForRequestCppCode()
{
if(do_you_have_something_for_me())
{
//call get_data_from_cpp_code and put the result in a nice .NET class
return true;
}
else return false;
}
}
c#代码
while(!waitForRequestCppCode())
{
//Do C# app stuff
}
//access the info from the wrapper and act, rinse and repeat
这只是一段非常粗糙的代码,可能有很多错误,只是为了证明一个观点
在c#中,您可以创建System.EnterpriseServices.ServicedComponent
的子类来创建COM+服务,该服务可以从非托管代码(使用CoCreateInstance
)调用。
查看这篇文章获取更多信息:https://msdn.microsoft.com/en-us/library/ms973847.aspx
制作此控件的公司声明,当从非托管c++调用时,他们将不支持他们的产品。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 在运行时处理类型擦除的数据-如何不重新发明轮子