1
我試圖從unity3d C#代碼調用.dll(由delphi製作)函數時出現以下錯誤。從unity3d c調用delphi.dll的錯誤#
下面是圖片,
和錯誤說,
和.dll代碼,
那麼爲什麼會出現錯誤以及如何解決?
非常感謝!
我試圖從unity3d C#代碼調用.dll(由delphi製作)函數時出現以下錯誤。從unity3d c調用delphi.dll的錯誤#
下面是圖片,
和錯誤說,
和.dll代碼,
那麼爲什麼會出現錯誤以及如何解決?
非常感謝!
你寫
error = GetRequestResult(code);
你需要寫
error = GetRequestResult(out code);
這恰恰是第二個錯誤信息的狀態。
看你的代碼,從德爾福DLL返回PChar
,你做的不是你的P /所調用兼容的方式。 P/invoke編組人員假定您的返回值分配爲CoTaskMemAlloc
,並且將返回指針上的CoTaskMemFree
。這將導致某些地方出現問題。我認爲你需要在某個時候解決這個問題,但因爲這不是這個問題的主題,所以我不會試圖在這裏解決問題。
哇謝謝! (out代碼)解決了這個問題。 – leegod 2012-07-31 15:23:11
和我不太瞭解你的PChar ....評論。所以你的意思是我不應該用'串'作'PChar'?是不是有一種簡單的方法來解決這個通信問題,比如將PChar改成與c#的字符串兼容的另一種類型? – leegod 2012-07-31 15:24:43
最簡單的做法是在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