我有此函數簽名一個DLL:錯誤調用的DLL使用Unicode的Delphi
function KP_RecuperarDadosFabricante(EnderecoIp, ChaveAcesso,
Porta: string; Return: PAnsiChar): Integer; stdcall; external 'Key.dll';
這是從DLL的手動樣品VB.NET代碼:
Dim ret As Integer
Dim ptrStr As IntPtr
Dim DadosFab As String
ptrStr = System.Runtime.InteropServices.Marshal.AllocHGlobal(256)
ret = KP_RecuperarDadosFabricante("192.168.1.201", "0", "4370", ptrStr)
DadosFab = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(ptrStr)
System.Runtime.InteropServices.Marshal.FreeHGlobal(ptrStr)
這是我的Delphi代碼:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
Return: string;
pReturn: PAnsiChar;
begin
GetMem(pReturn, 512);
FillChar(pReturn^, 512, 0);
Memo1.Text:='';
if KP_RecuperarDadosFabricante("192.168.1.201", "0", "4370", pReturn) = 1 then
begin
Return := StrPas(pReturn);
ShowMessage(Return);
end
else
begin
ShowMessage('Error');
end;
end;
此代碼wor ks在德爾福7,,但不適用於德爾福XE。它總是返回「錯誤」。 如何使此代碼在Delphi XE?
**遠**指令已棄用,因爲... mmmm,也許因爲德爾福3如果不是德爾福1,你爲什麼使用它?釋放你獲得的記憶怎麼樣? vb示例釋放它,但是您的代碼每次調用泄漏512個字節! – jachguate 2013-03-15 23:27:57
@jachguate我刪除了「遠」的代碼,但沒有解決問題。內存還沒有問題。謝謝 – dataol 2013-03-15 23:54:15
我沒有說它解決了你的問題,但他們是其他_problems_你。 – jachguate 2013-03-16 04:34:20