我有一个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,或者以其他方式更改整个内容以使其工作。
感谢您的帮助。