DLL动态库的原型1:int ReadBaseMsg( unsigned char * pMsg, int * len);
我在DELPHI里该怎样定义和调用:
Function ReadBaseMsgW(pMsg:Pchar;iNum:Integer):integer; stdcall;far; External 'sdtapi.dll';procedure TMainForm.Button1Click(Sender: TObject);
var
  iNum:pInteger;
  Buffer:Pchar;
begin
  iBuffer := PChar(AllocMem(300));
  ReadBaseMsg(iBuffer,@iNum);
end
这样的模式对吗,但我现在iBuffer读出来的内容不对请教该怎样确写法

解决方案 »

  1.   

    应该定义为:
    function ReadBaseMsgW(pMsg:Pchar;iNum:^Integer):integer; stdcall;far; External 'sdtapi.dll'; 
      

  2.   

    DLL里最好是明确调用约定,如:int ReadBaseMsg(unsigned char * pMsg, int * len); cdecl; 然后Delphi里可以这样声明:function ReadBaseMsg(pMsg:PChar; var iNum: Integer): Integer; cdecl; External 'sdtapi.dll'; Delphi调用:procedure TMainForm.Button1Click(Sender: TObject);
    var
      iNum: Integer;
      Buffer: PChar;
    begin
      iNum := 300;
      Buffer := PChar(AllocMem(iNum));
      ReadBaseMsg(iBuffer, iNum);
      FreeMem(Buffer);  // 记得释放内存
    end