动态库调用
请把VC的代码改为Delphi
BOOL _stdcall GetCenterNumber(char* strCenterNumber);
BOOL _stdcall SetCenterNumber(const char* strCenterNumber);我的写法是
function SetCenterNumber(strCenterNumber:PChar):bool;stdcall;external 'smspdu.dll' name 'SetCenterNumber';
  function GetCenterNumber(strCenterNumber:PChar):bool;stdcall;external 'smspdu.dll' name 'GetCenterNumber';procedure TForm1.Button1Click(Sender: TObject);
  var
    S:PChar;
    i:bool;
    ss:String;
begin
  new(S);
  i:=GetCenterNumber(S);
  if i then//以上通过,跟踪时看到S为正确的值
    begin
      SS:=PChar(S);//此处报错,出现CPU调试窗体。
      Memo1.Lines.Add(ss);
    end;  i:=SetCenterNumber('123456');//此处报错,但i为真
  if i then
    Memo1.Lines.Add('Center OK')
  else
    Memo1.Lines.Add('Center Error');
  dispose(S);
end;请赐教!

解决方案 »

  1.   

    不是用New,
    要用GETMEM, FREEMEM
    根據你的需要來申請分配內存
      

  2.   

    应该不是用new的原因我的函数
    procedure TForm1.Button3Click(Sender: TObject);
    var
    s:pchar;
    ss:string;
    begin
      new(s);
      s:='abcde';
      ss:=pchar(s);
      listbox1.Items.Add(ss);
    end;
    运行就正常
      

  3.   

    GETMEM(s,100);
       i:=GetCenterNumber(S);  
       if  i  then
           begin  
               SS:=PChar(S);
               Memo1.Lines.Add(ss);  
           end;
      FreeMem(s);//以上通过
     
      i:=SetCenterNumber('123456');//此处还报错
      //请问是调用的写法错了吗? 
      vc是这样写的
      BOOL  _stdcall  SetCenterNumber(const  char*  strCenterNumber);