2012-07-31 50 views
1

我試圖從unity3d C#代碼調用.dll(由delphi製作)函數時出現以下錯誤。從unity3d c調用delphi.dll的錯誤#

下面是圖片,

enter image description here

和錯誤說,

enter image description here

和.dll代碼,

enter image description here

那麼爲什麼會出現錯誤以及如何解決?

非常感謝!

回答

6

你寫

error = GetRequestResult(code); 

你需要寫

error = GetRequestResult(out code); 

這恰恰是第二個錯誤信息的狀態。


看你的代碼,從德爾福DLL返回PChar,你做的不是你的P /所調用兼容的方式。 P/invoke編組人員假定您的返回值分配爲CoTaskMemAlloc,並且將返回指針上的CoTaskMemFree。這將導致某些地方出現問題。我認爲你需要在某個時候解決這個問題,但因爲這不是這個問題的主題,所以我不會試圖在這裏解決問題。

+0

哇謝謝! (out代碼)解決了這個問題。 – leegod 2012-07-31 15:23:11

+0

和我不太瞭解你的PChar ....評論。所以你的意思是我不應該用'串'作'PChar'?是不是有一種簡單的方法來解決這個通信問題,比如將PChar改成與c#的字符串兼容的另一種類型? – leegod 2012-07-31 15:24:43

+0

最簡單的做法是在Delphi端使用WideString,在C#端使用[MarshalAs(UnmanagedType.BSTR)]。但是這對於返回值不起作用,因爲Delphi對於返回值具有相當不尋常的語義(參見http://stackoverflow.com/questions/9349530/why-can-a-widestring-not-be-used-as-a-函數返回值換互操作)。所以我會將字符串返回值轉換爲out或ref參數。 – 2012-07-31 15:29:26