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