Domanda

sto avendo problemi di chiamare una funzione Delphi da C # (tentato di leggere o scrivere memoria protetta), e si chiedeva che cosa il modo corretto di chiamare il metodo dovrebbe essere. La firma funzione di Delphi è la seguente:

procedure methodToCall(
    aFirstParameter: Widestring; 
    var aSecondParameter: Widestring
    ); stdcall;

Qual è il modo corretto di chiamare questo metodo da C #?

È stato utile?

Soluzione

Il WideString è compatibile con COM BSTR e così il marshaller .net dovrebbe essere in grado di consumare tranquillamente:

[DllImport(@"test.dll")]
private static extern void methodToCall(
    [MarshalAs(UnmanagedType.BStr)]
    string aFirstParameter,
    [MarshalAs(UnmanagedType.BStr)]
    ref string aSecondParameter
);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top