delphi 调用DLL问题。

cas005 2011-05-17 12:16:06
文档说明上写的:
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 分配内存换了好几种方式,都是不行的。。。。。
...全文
58 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQLDebug_Fan 2011-05-17
  • 打赏
  • 举报
回复
function BUSINESS_HANDLE(inputData:PChar;var outputData:PChar):Integer
两个都是传地址,改为
function BUSINESS_HANDLE(var inputData: PChar; var outputData: PChar): Integer
另外把cdecl改为stdcall试试。
pangdick 2011-05-17
  • 打赏
  • 举报
回复
手动分配和释放内存 不用var声明参数 传入的是指针 内存没有释放之前 指针会一直指向目标地址块 恩
cas005 2011-05-17
  • 打赏
  • 举报
回复
来接分咯~~
bdmh 2011-05-17
  • 打赏
  • 举报
回复
确认是cdecl还是stdcall
cas005 2011-05-17
  • 打赏
  • 举报
回复
额.我自己解决了:
在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;
cas005 2011-05-17
  • 打赏
  • 举报
回复
我现的问题是,调用成功了。但是获取不到返回来的outputData数据,老是报地址错误。哎~~
cas005 2011-05-17
  • 打赏
  • 举报
回复
1楼的兄弟,如果按照你的作法,反而是调用不成功的。

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧