在C#和C之间共享变量

时间:2013-07-26 02:10:24

标签: c# c++ memory shared inject

我已经看到几乎同一个问题的答案,但没有C#代码可以帮助我理解。

我有一个C ++ .DLL文件注入内存。虽然,这个DLL只是从应用程序中提取信息,并从C#.exe获取信息。

C#exe信息每秒都会改变,而C ++信息只会改变一次或两次。

如何在两个正在运行的应用程序之间创建共享变量,以及如何读取/写入它?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您想构建可靠的解决方案,则应使用以下内容:

  1. 从C#调用C ++函数。保持参数类型尽可能简单。任何C#线程都可以进行这些调用。
  2. 启动您自己的C ++线程,只读取/修改C ++数据并仅调用C ++方法和函数。
  3. 使用Windows内核对象进行同步和其他类似的操作。当一方发出信号并且另一方等待它时,这很好。
  4. 其他类型的互动是可能的,但我不鼓励使用它们。这些附加类型并不简单,并没有明确定义,包含警告等。上述3种方法允许构建复杂的应用程序。

    要调用C ++ finction,请添加到程序集:

    [DllImport("User32.dll")]
    static extern Boolean MessageBeep(UInt32 beepType);
    

    这告诉User32有你要调用的入口点MessageBeep。之后,您可以将其用作任何其他功能:

    MessageBeep(0);
    

    以类似的方式,您可以调用GetProcAddress或您自己的DLL中的任何其他入口点。

答案 1 :(得分:0)

我将使用命名管道,这样两个进程就可以轻松地进行通信! (C#服务器和C ++客户端)

感谢大家的帮助!