文档说明上写的:
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 分配内存换了好几种方式,都是不行的。。

解决方案 »

  1.   

    function BUSINESS_HANDLE(inputData:PChar;var outputData:PChar):Integer
    两个都是传地址,改为
    function BUSINESS_HANDLE(var inputData: PChar; var outputData: PChar): Integer
    另外把cdecl改为stdcall试试。
      

  2.   

    我现的问题是,调用成功了。但是获取不到返回来的outputData数据,老是报地址错误。哎~~
      

  3.   

    额.我自己解决了:
    在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;
      

  4.   

    手动分配和释放内存  不用var声明参数 传入的是指针 内存没有释放之前 指针会一直指向目标地址块 恩