c# - 在 C# 和 C 之间共享变量

标签 c# c++ memory shared inject

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

我有一个 C++ .DLL 文件注入(inject)到内存中。虽然,此 DLL 只是从应用程序获取信息,也从 C# .exe 获取信息。

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

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

谢谢!

最佳答案

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

  1. 从 C# 调用 C++ 函数。使参数类型尽可能简单。任何 C# 线程都可以进行这些调用。
  2. 启动您自己的 C++ 线程,这些线程仅读取/修改 C++ 数据并仅调用 C++ 方法和函数。
  3. 使用 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/

相关文章:

performance - Delphi - 内存使用情况并将类作为 Var 参数传递

c++ - F# 代码优化还是真的那么慢?

python - bool 值的大列表和小列表以及字节数组的相对性能

c# - 当使用带有IEnumerable值的Dictionary时,无法从用法中推断出方法的类型参数

c# - 单声道中的多维数组索引错误

c++ - 取消引用不适用于集合中的智能指针

c++ - 在定义之前声明未定义的 std::function 的目的是什么?

haskell - Cabal安装标准内存不足

c# - 使用 Moq 模拟 HttpApplicationState 时似乎无法设置对象

c# - 使用 HTMLAgilityPack 进行 XHTML 解析