请教关于调用问题。

goldsoft 2009-04-27 11:20:54
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读出来的内容不对请教该怎样确写法
...全文
146 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pilicat 2009-04-28
  • 打赏
  • 举报
回复
应该定义为:


function ReadBaseMsgW(pMsg:Pchar;iNum:^Integer):integer; stdcall;far; External 'sdtapi.dll';



kumico 2009-04-28
  • 打赏
  • 举报
回复
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



16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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