Использовать объект, созданный в управляемом коде из неуправляемого кода (по ссылке, а не по значению) - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть C # dll, которая вызывается из неуправляемого кода (MT4-терминал) через DLLExport RGiesecke. Я могу вызывать в 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-клиент).

К сожалению, я не представляю, как объявить s1 в моем MQL-коде или как-то изменить весь материал, чтобы он заработал.

Спасибо за помощь.

...