将数据从c++传递到c#

本文关键字:c++ 数据 | 更新日期: 2023-09-27 18:01:22

我正在考虑开发一个c#应用程序,需要从遗留的非托管c++应用程序中调用。c#应用程序将创建一个Winforms或WPF窗口(仍在研究使用哪个),其中有第三方控件。首先,我研究了使用c++/CLR包装器类来调用它,然后使用COM互操作。在将第三方控件添加到表单之前,这两种方法都很好。制作此控件的公司声明,当从非托管c++调用时,他们将不支持他们的产品。

我现在正在考虑替代方案,其中c#应用程序是一个独立的应用程序,然后我可以通过socket或类似的方式从c++应用程序传递数据。

我想知道是否有人能推荐最好的方法来做这件事。我考虑过套接字或内存映射文件。我不确定什么是最好的方法,或者是否有更好的方法。

将数据从c++传递到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++中调用它,我认为你不会遇到任何问题。