私はこの関数シグネチャを持つDLLを持っています:
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;
このコードはDelphi7ではうまく機能しますが、DelphiXEでは機能しません。常に「エラー」を返します。このコードをDelphiXEで機能させる方法は?