2010-11-11 3 views
4

Я пытаюсь передать строку из C# в Delphi построенную DLL. Delphi DLL ожидает PChar.Передача строки как PChar из CSharp в Delphi DLL

Вот на экспорт Delphi

procedure DLL_Message(Location:PChar;AIntValue :integer);stdcall; 
external 'DLLTest.dll'; 

C# импорт (в прошлом один я попробовал, были строки, символ * иая строка ...)

[DllImport(
      "DLLTest.dll", 
      CallingConvention = CallingConvention.StdCall, 
      CharSet = CharSet.Ansi, 
      EntryPoint = "DLL_Message" 
     )] 
     public static extern void DLL_Message(IntPtr Location, int AIntValue); 

Я получаю нарушение прав доступа доступ значения в любом путь.

Есть ли решение передать строковое значение как PChar в C#?

ответ

4

Попробуйте использовать атрибут MarshalAs, который позволяет вам управлять используемым типом native.

список типов можно найти в MSDN:

http://msdn.microsoft.com/de-de/library/system.runtime.interopservices.unmanagedtype.aspx

DllImport(
      "DLLTest.dll", 
      CallingConvention = CallingConvention.StdCall, 
      CharSet = CharSet.Ansi, 
      EntryPoint = "DLL_Message" 
     )] 
     public static extern void DLL_Message(
      [MarshalAs(UnmanagedType.LPStr)] string Location, 
      int AIntValue 
     ); 
+0

MarshalAs здесь не нужен. Это по умолчанию маршалинг. Аналогично для параметров атрибуту DllImport. Требуется только имя файла. –

+0

Вы в этом уверены? Разве это не по умолчанию UnmanagedType.LPWStr (UTF-16)? –

+1

Видимо, это BStr: http://msdn.microsoft.com/en-us/library/s9ts558h.aspx –

Смежные вопросы