Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
非托管C#导出与外部托管程序集共享的数据_C#_Unmanaged - Fatal编程技术网

非托管C#导出与外部托管程序集共享的数据

非托管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 {

Im使用非托管导出库创建由MetaTrader4导入的dll。程序集中的数据交换工作正常,但如何从另一个程序集中访问MetaTrader更新的变量

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++方面用数据段解决了同样的问题,但是新的实现方式让我感到困惑。。。