Search code examples
c#delphipinvokemarshallingwidestring

How to call this Delphi function from C#?


i'm having problems calling a delphi function from C# (attempted to read or write protected memory), and was wondering what the correct way of calling the method should be. The Delphi function signature is as follows:

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

What is the correct way of calling this method from C#?


Solution

  • The WideString is compatible with COM BSTR and so the .net marshaller should be able to consume it quite happily:

    [DllImport(@"test.dll")]
    private static extern void methodToCall(
        [MarshalAs(UnmanagedType.BStr)]
        string aFirstParameter,
        [MarshalAs(UnmanagedType.BStr)]
        ref string aSecondParameter
    );