如果我不返回任何東西,或者我返回一個整數,就可以正常工作。但是,如果我嘗試返回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