C++的Dll调用问题(100分)

  • 主题发起人 主题发起人 leeeeleeee
  • 开始时间 开始时间
L

leeeeleeee

Unregistered / Unconfirmed
GUEST, unregistred user!
刚提的问题比较含糊,这个清晰点~~[:(]
有一个c++的Mess.dll
结构:
typedef struct {
char Title[64];
char Time[64];
char Content[256];
}Message;
int _stdcall GetMess(Message* piMess);

下面写法不知道对不
TMessage = record
Title :array[0..63] of char;
Time :array[0..63] of char;
Content :array[0..255] of char;
end;

function GetMess(piMess: TMessage):Integer;stdcall;external 'Mess.dll';

使用。。好像有问题
procedure Tm1.Button2Click(Sender: TObject);
var piMess:TMessage;
begin
aaa(piMess);
Memo2.Text:=piMess.Title +' '+ piMess.Time+' '+ piMess.Content;
end;
 
应该用这个:
function GetMess(var piMess: TMessage):Integer;stdcall;external 'Mess.dll';
 
指针不用VAR没有关系
 
var在Delphi里面就是传递指针!!!!!!!!!!你看看Windows的各种API,在Delphi里面都被翻译成var了!你要是不想用var,就老老实实的声明成PMessage.因为Delphi传递参数的时候,如果你不指定var或者const,则会在内存中拷贝一份再发给调用函数,这样作出的修改不会反映到外部.
 
//函数参数说明:
//申明一个Message结构数组象这样:Message piMess[40];
//返回值说明:
// 0:表示没有接收到信息
// n:表示接收到的信息数
int _stdcall GetMess(Message* piMess);
下面写法不知道对不 // 这样写是对的
TMessage = record
Title :array[0..63] of char;
Time :array[0..63] of char;
Content :array[0..255] of char;
end;
TMyMessage = ^TMessage;

function GetMess(piMess: TMyMessage):Integer;stdcall;external 'Mess.dll';

这样使用就不会有问题了:
procedure Tm1.Button2Click(Sender: TObject);
var piMess:TMessage; // 这里没有必要定义成指针,直接定义记录变量就可以了
begin
GetMess(@piMess); // 使用的时候再取变量地址传给函数
Memo2.Text:=piMess.Title +' '+ piMess.Time+' '+ piMess.Content;
end;
 
后退
顶部