如果我不返回任何东西,或者我返回一个整数,就可以正常工作。但是,如果我尝试返回PChar类型,即..在web服务器上调用Delphi DLL的ASP.NET web应用程序,在返回PChar字符串时锁定
result := PChar('') or result:= PChar('Hello')
的Web应用程序只是冻结了,我看它的内存数逐渐得到任务管理器高。
奇怪的是,该DLL在VStudio调试服务器上或通过C#应用程序正常工作。我能想到的唯一的事情就是,IIS服务器运行在64位Windows上。
它似乎不是一个兼容性问题,虽然因为我可以成功地写入文本文件并从DLL做其他事情......我只是不能返回一个PChar字符串。
尝试使用PWideChar,试图返回'东西\ 0',尝试了我能想到的一切。不幸的是不幸运。
[DllImport("TheLib.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private static extern string SomeFunction();
string result = SomeFunction();
德尔福:
library TheLib;
function SomeFunction() : PChar export; stdcall;
begin
return PChar('');
end;
exports
SomeFunction
我必须等到星期一在工作上试用IIS的解决方案,但背后的理由听起来很可靠。但有一件事..我一直在家里测试代码,我无法获得返回值的工作,它只是给出了一个异常'尝试读取或写入受保护的内存。'。然而,我可以通过使用'out'变量并以这种方式传递结果来实现我想要做的事情。你知道我为什么不能返回吗?我正在编码结果,就像在你的代码中一样。是因为它是德尔福2007?我可以使用'out'技巧,但我想知道为什么它是必要的。 – NoPyGod 2012-02-18 22:40:26
我看到Alex在这里有同样的问题 - http://stackoverflow.com/questions/8533505/accessing-delphi-dll-throwing-ocasional-exception – NoPyGod 2012-02-18 22:42:32
这里是我的来源http://pastebin.com/NfWLdF6V – NoPyGod 2012-02-18 22:46:41