从C+传递数据+;到C# 我正在研究开发一个C应用程序,它需要从一个遗留的非托管C++应用程序调用。C#应用程序将创建一个Winforms或WPF窗口(仍在研究使用哪个窗口),其中包含第三方控件。首先,我研究了使用C++/CLR包装类调用它,然后使用COM互操作。在将第三方控件添加到表单之前,这两种方法都可以使用。生产此控件的公司声明,当从非托管C++调用时,他们不支持产品。 我现在考虑的是C++应用程序是一个独立的应用程序,然后我可以通过套接字或类似的方式从C++应用程序传递数据。

从C+传递数据+;到C# 我正在研究开发一个C应用程序,它需要从一个遗留的非托管C++应用程序调用。C#应用程序将创建一个Winforms或WPF窗口(仍在研究使用哪个窗口),其中包含第三方控件。首先,我研究了使用C++/CLR包装类调用它,然后使用COM互操作。在将第三方控件添加到表单之前,这两种方法都可以使用。生产此控件的公司声明,当从非托管C++调用时,他们不支持产品。 我现在考虑的是C++应用程序是一个独立的应用程序,然后我可以通过套接字或类似的方式从C++应用程序传递数据。,c#,c++,.net,sockets,C#,C++,.net,Sockets,我想知道是否有人能推荐最好的方法。我考虑过套接字或内存映射文件。我不确定什么是最好的方法,或者是否有更好的方法 生产这种控制的公司声明,当他们从非托管C++调用时,他们不支持他们的产品。 我认为如果从托管C++调用它,你不会有任何问题。从我的经验来看,从C/C++到C++的代码比其他方法更容易调用C++。我会尝试从C应用程序中编写一个主动请求器,它通过C++ /CLI包装器向C++代码请求信息。 谁使用数据或谁负责生成数据并不重要。这只是一个安排通话的问题 c++代码 bool do_you_h

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

生产这种控制的公司声明,当他们从非托管C++调用时,他们不支持他们的产品。
我认为如果从托管C++调用它,你不会有任何问题。从我的经验来看,从C/C++到C++的代码比其他方法更容易调用C++。我会尝试从C应用程序中编写一个主动请求器,它通过C++ /CLI包装器向C++代码请求信息。 谁使用数据或谁负责生成数据并不重要。这只是一个安排通话的问题

c++代码

bool do_you_have_something_for_me();
void get_data_from_cpp_code(HugeStructure &response);
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;
   }
}
while(!waitForRequestCppCode())
{
   //Do C# app stuff
}
//access the info from the wrapper and act, rinse and repeat
c++/CLI代码

bool do_you_have_something_for_me();
void get_data_from_cpp_code(HugeStructure &response);
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;
   }
}
while(!waitForRequestCppCode())
{
   //Do C# app stuff
}
//access the info from the wrapper and act, rinse and repeat
c#代码

bool do_you_have_something_for_me();
void get_data_from_cpp_code(HugeStructure &response);
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;
   }
}
while(!waitForRequestCppCode())
{
   //Do C# app stuff
}
//access the info from the wrapper and act, rinse and repeat
这只是一个非常粗糙的代码,可能有很多错误,只是为了证明这一点。

在C#中,您可以创建
System.EnterpriseServices.ServicedComponent
的子类来创建COM+服务,该服务可以从非托管代码调用(使用
CoCreateInstance


有关更多信息,请参阅本文:

正如我在原始帖子中所述,我确实遇到了问题。它使应用程序崩溃,公司承认这是一个问题,不支持以这种方式使用它。请允许我们继续回答这里提出的问题。非常感谢。也许吧,但如果它“检测”处于混合模式环境并崩溃,那么这是一个非常奇怪的控件。我做过许多混合模式的应用程序(托管调用本机,本机调用托管,甚至在同一个程序中来回),但从未遇到过您的问题。也许试着把它放在一个单独的应用程序域中,看看这是否能让它平静下来,这样它就无法“检测”它的失败方式了?我不想费心去调查它为什么会崩溃,仅仅因为该公司说他们不支持它。这种控制装置耗资数千英镑,因此以不受支持的方式使用它在商业上是愚蠢的。任何公司都会疯狂地使用不受支持的第三方工具。因此,我们正在研究使用它的其他方式。为什么公司不支持这种方式与我们无关,这不是这个应用的一个选项,所以我问了如何将数据从C++传递到C?可能有一种场景,我们希望通过两种方式传递数据,但是C++到C是最重要的。从您所说的,您可以访问C++和C代码。这不是谁消费或生产数据的问题,而是由哪一方来调用。我将进一步回答我的问题:C如何获取和使用HugEnguly& Read的数据?使用两个单独的进程是一种可行的方法,因为这比从本地C++开始更容易,并且在托管的UI中添加了很多奇怪的头痛,即使可能。所以你最好的做法是做“C++与C之间的IPC”,谷歌搜索字符串,有很多可能性。