2012-07-31 43 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