2010-11-11 41 views
4

我試圖通過從C#中的字符串德爾福創建的DLL。 德爾福DLL期待PChar。傳遞字符串作爲PChar類型從CSHARP德爾福DLL

這裏是德爾福出口

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); 

我收到訪問衝突在任何訪問值辦法。

是否有任何解決方案,通過在C#中的字符串值作爲PChar類型?

回答

4

嘗試用MarshalAs特性,使您可以控制所使用的本機類型。

類型列表可以在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屬性的參數同樣如此。只需要文件名。 – 2012-02-15 00:10:48

+0

你確定嗎?不是默認的UnmanagedType.LPWStr(UTF-16)? – 2012-02-15 10:02:10

+1

顯然,這是BSTR:http://msdn.microsoft.com/en-us/library/s9ts558h.aspx – 2012-02-15 10:08:02