I will really appreciate anybody's help about how a Unicode string can be passed (marshaled) from a managed (Delphi .NET) to an unmanaged (Delphi's Win32 DLL) function.
The managed environment (Delphi .NET):
...
interface
...
const TM_PRO_CONVERTER = 'TM.PROFileConverter.dll';
function ImportLineworksFromPROFile(FileName :String;
TargetFileNameDXF :String): Integer;
...
implementation
...
[DllImport(TM_PRO_CONVERTER, EntryPoint = 'ImportLineworksFromPROFile',
CharSet = CharSet.Ansi, SetLastError = True,
CallingConvention = CallingConvention.StdCall)]
function ImportLineworksFromPROFile(FileName :String;
TargetFileNameDXF :String): Integer; external;
...
The unmanaged environment (Delphi's Win32 DLL):
library TM.PROFileConverter;
...
function ImportLineworksFromPROFile(FileName :String;
TargetFileNameDXF :String) :Integer; stdcall;
exports
ImportLineworksFromPROFile;
...
Thank you for your time.
.Net, and therefore Delphi for .Net, can not marshal win32 Delphi's AnsiString. It does know how to marshal PChar. Changing the win32 parameters to PChar should work.
PS: The unmanaged function uses ANSI encoding, not Unicode. If you want your unmanaged code to handle unicode you should use PWideChar or WideString instead of PChar and CharSet = CharSet.Unicode on the managed side.