非托管C#导出与外部托管程序集共享的数据
Im使用非托管导出库创建由MetaTrader4导入的dll。程序集中的数据交换工作正常,但如何从另一个程序集中访问MetaTrader更新的变量非托管C#导出与外部托管程序集共享的数据,c#,unmanaged,C#,Unmanaged,Im使用非托管导出库创建由MetaTrader4导入的dll。程序集中的数据交换工作正常,但如何从另一个程序集中访问MetaTrader更新的变量 using RGiesecke.DllExport; using System.Runtime.InteropServices; public static class UnmanagedExports { static int _value = 10; public static int Value {
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
public static class UnmanagedExports
{
static int _value = 10;
public static int Value
{
get { return _value; }
set { _value = value; }
}
[DllExport("PassInt", CallingConvention = CallingConvention.StdCall)]
public static void PassInt(int value)
{
Value = value;
}
}
尝试从单独的C#应用程序访问值时:
private void timer1_Tick(object sender, EventArgs e)
{
Console.WriteLine(UnmanagedExports.Value);
}
输出总是:10
我遗漏了什么?问题在于“单独的C#应用程序”。它将拥有这个程序集的自己的副本和自己的数据。Metatrader从未更新过它,它加载了自己的DLL副本。跨流程边界共享数据需要流程互操作机制,如套接字、命名管道、内存映射文件或WCF。使用注册表项可能是最简单的方法。谢谢Hans。奇怪的是,我已经意识到了这个问题,并且在c++方面用数据段解决了同样的问题,但是新的实现方式让我感到困惑。。。