对于几乎相同的问题,我已经看到了几个答案,但是没有 C# 代码可以帮助我理解。
我有一个 C++ .DLL 文件注入(inject)到内存中。虽然,此 DLL 只是从应用程序获取信息,也从 C# .exe 获取信息。
C#的exe信息每秒都会变化,而C++的信息只会变化一两次。
如何在两个正在运行的应用程序之间创建共享变量,以及如何读取/写入它?
谢谢!
最佳答案
如果您想构建可靠的解决方案,您应该使用以下内容:
- 从 C# 调用 C++ 函数。使参数类型尽可能简单。任何 C# 线程都可以进行这些调用。
- 启动您自己的 C++ 线程,这些线程仅读取/修改 C++ 数据并仅调用 C++ 方法和函数。
- 使用 Windows 内核对象进行同步和其他类似操作。当一侧发出事件信号而另一侧等待它时,这很好。
其他类型的交互也是可能的,但我不鼓励使用它们。这些额外的类型并不简单,也没有明确定义,包含注意事项等。上述 3 种方法允许构建复杂的应用程序。
要调用 C++ 函数,请添加到您的程序集中:
[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);
这表明 User32 具有您要调用的入口点 MessageBeep
。之后,您可以将其用作任何其他功能:
MessageBeep(0);
以类似的方式,您可以调用 GetProcAddress
或您自己的 DLL 中的任何其他入口点。
关于c# - 在 C# 和 C 之间共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17871770/