使用从非托管代码在托管代码中创建的对象(通过引用,而不是值)

时间:2019-04-03 17:33:42

标签: c# marshalling metatrader4 mql

我有一个C#dll,它是通过RGiesecke的DLLExport从非托管代码(MT4终端)中调用的。我可以调用C#dll并传入和传出值参数而不会出现问题。

现在,我的任务是将在C#DLL(来自WCF-Service)中创建的对象传递到非托管代码中,在那里更改一些成员,并将更改中继回WCF客户端。不幸的是,我只能调用从非托管代码到托管代码。所以我以为我只是通过引用传递对象...但无法使其正常工作。

这就是我拥有的:

受管理方:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct S1
{
    public int Period;
    public int Seconds;

}

    [DllExport(CallingConvention = CallingConvention.StdCall)]
    public static void f( ref S1  s1 ) 
    {
        s1 = new S1(); // ... in real program comes from WCF-Service       
    }

在非托管方面(MQL代码)

struct S1
{
   int Period;
   int Seconds;
}

#import "theDLL.dll"
void f( S1& s1 );
#import

我想写

... s1;
f( s1 );
s1.seconds = 42;

的效果是,我可以访问托管DLL中更改的“秒”值(将其传递回WCF客户端)。

不幸的是,我不知道如何在我的MQL代码中声明s1,或者以其他方式更改整个内容以使其工作。

感谢您的帮助。

0 个答案:

没有答案