C++的Dll调用问题(这个300分)(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;
 
int _stdcall GetMess(Message* piMess);
兄弟,这是指针了,你的Delphi声明有错误了.应该这样:
function GetMess(var piMess: TMessage):Integer;stdcall;external 'Mess.dll';
 
这种dll文件可能是MFC的DLL文件 ,delphi不能调用 除非自己在加个外套 呵呵
 
//函数参数说明:
//申明一个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:TMyMessage;
begin
aaa(piMess);
Memo2.Text:=piMess.Title +' '+ piMess.Time+' '+ piMess.Content;
end;
作了点修改,但数据读的是乱码~~
 
能把DLL发过来吗???
wp231957@163.com
 
//函数参数说明:
//申明一个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;
 
问题是:[red]申明一个Message结构数组象这样:Message piMess[40];[/red]
//返回值说明:
// 0:表示没有接收到信息
// n:表示接收到的信息数
 
PMessage = ^TMessage;
TMessage = record
Title : array[0..63] of char;
Time : array[0..63] of char;
Content : array[0..255] of char;
end;

function GetMess(piMess: PMessage):Integer;stdcall;external 'Mess.dll';
 
==================
问题是:[red]申明一个Message结构数组象这样:Message piMess[40];[/red]
//返回值说明:
// 0:表示没有接收到信息
// n:表示接收到的信息数
===================
还是一样的啊,调用函数的时候取数组第一个单元的地址传给函数就行了:
procedure Tm1.Button2Click(Sender: TObject);
var piMess:TMessage; // 这里没有必要定义成指针,直接定义记录变量就可以了
begin
GetMess(@piMess[0]); // 使用的时候再取变量地址传给函数
Memo2.Text:=piMess.Title +' '+ piMess.Time+' '+ piMess.Content;
end;
 
谢谢~~不知为什么分还是100,偶开了三贴,大部给你吧~~哈
 
后退
顶部