文档说明上写的:
int BUSINESS_HANDLE( char* inputData,char* outputData)
输入参数:inputData
输出参数:outputData
返回值: 成功 =0 失败 <0 在delphi里我是这么写的:
function BUSINESS_HANDLE(inputData:PChar;var outputData:PChar):Integer;cdecl;
external 'SiInterface.dll';调用的时候:
var
a:Integer;
inputData,outputData:PChar;
outstr:string;
begin
try
inputData:=pchar('XXXXXX');
GetMem(outputData,4096);
a:=BUSINESS_HANDLE(inputData,outputData);
outstr:=outputData;//string(outputData);
if a=0 then
begin
showmessage('调用成功。');
showmessage('成功返回信息:'+#13+outstr);
end
else
begin
showmessage('调用失败。');
end
finally
FreeMem(outputData,4096);
end;
end;
//调用之后,a=0 弹出的是“调用成功。”然后为什么程序就马上直接死掉了呢?没有运行到:成功返回信息这一步
我是无法单步跟踪的一弹出“调用成功。”提示框后,程序就马上被结束进程了,不知道怎么回事,请大家帮帮忙看看。谢谢了~~
另:outputData 分配内存换了好几种方式,都是不行的。。
int BUSINESS_HANDLE( char* inputData,char* outputData)
输入参数:inputData
输出参数:outputData
返回值: 成功 =0 失败 <0 在delphi里我是这么写的:
function BUSINESS_HANDLE(inputData:PChar;var outputData:PChar):Integer;cdecl;
external 'SiInterface.dll';调用的时候:
var
a:Integer;
inputData,outputData:PChar;
outstr:string;
begin
try
inputData:=pchar('XXXXXX');
GetMem(outputData,4096);
a:=BUSINESS_HANDLE(inputData,outputData);
outstr:=outputData;//string(outputData);
if a=0 then
begin
showmessage('调用成功。');
showmessage('成功返回信息:'+#13+outstr);
end
else
begin
showmessage('调用失败。');
end
finally
FreeMem(outputData,4096);
end;
end;
//调用之后,a=0 弹出的是“调用成功。”然后为什么程序就马上直接死掉了呢?没有运行到:成功返回信息这一步
我是无法单步跟踪的一弹出“调用成功。”提示框后,程序就马上被结束进程了,不知道怎么回事,请大家帮帮忙看看。谢谢了~~
另:outputData 分配内存换了好几种方式,都是不行的。。
两个都是传地址,改为
function BUSINESS_HANDLE(var inputData: PChar; var outputData: PChar): Integer
另外把cdecl改为stdcall试试。
在delphi声明:(指针传递,去掉var )
function BUSINESS_HANDLE(inputData:PChar;outputData:PChar):Integer;cdecl;
external 'SiInterface.dll';procedure TFrmmain.btn2Click(Sender: TObject);
var
a:Integer;
inputData,outputData:PChar;
instr,outstr:string;
begin
try
GetMem(outputData,255);
instr:='dfasdadfadds';
inputData:=PChar(instr);
a:=BUSINESS_HANDLE(inputData,outputData);
if a=0 then
begin
ShowMessage('成功!');
end
else
begin
ShowMessage('不成功!返回:'+inttostr(a));
end;
if chk1.Checked then
begin
outstr:=string(outputData);
ShowMessage('返回信息:'+#13+outstr);
end;
finally
FreeMem(outputData);
end;end;