动态链接库的接口如下:
library WM_IC;uses
classes,SysUtils,
accesscard in 'accesscard.pas';{$R *.res}experts
wm_create_sset;beginend.//////////////////////////////////
主调程序中声明如下:(因参数太多,所以省略了没写出来)
function wm_create_sset(....):boolean;stdcall;far;external 'WM_IC.dll' name 'wm_create_sset';该函数在'accesscard.pas'中声明实现.
///////////////////////
调用
procedure TForm1.Button1Click(Sender: TObject);
begin
wm_create_sset(0,'abcd','ffffffff',2,90.2,3,3,5.5,10,10,10,10);
end;
该调用方式会出错!
但是采用下面这种调用方式则没有问题.
动态链接库的接口如下:
library WM_IC;uses
classes,SysUtils,
accesscard in 'accesscard.pas';{$R *.res}procedure wm;
begin
wm_create_sset(0,'abcd','ffffffff',2,90.2,3,3,5.5,10,10,10,10);
end;experts
wm;beginend./////////////////
主调函数中声明如下;
procedure wm;stdcall;far;external 'WM_IC.dll' name 'wm_create_sset';///////////////
调用
procedure TForm1.Button1Click(Sender: TObject);
begin
wm;
end;这是为什么啊?我想直接采用前一种方式,由主调函数将参数传给wm_create_sset;
library WM_IC;uses
classes,SysUtils,
accesscard in 'accesscard.pas';{$R *.res}experts
wm_create_sset;beginend.//////////////////////////////////
主调程序中声明如下:(因参数太多,所以省略了没写出来)
function wm_create_sset(....):boolean;stdcall;far;external 'WM_IC.dll' name 'wm_create_sset';该函数在'accesscard.pas'中声明实现.
///////////////////////
调用
procedure TForm1.Button1Click(Sender: TObject);
begin
wm_create_sset(0,'abcd','ffffffff',2,90.2,3,3,5.5,10,10,10,10);
end;
该调用方式会出错!
但是采用下面这种调用方式则没有问题.
动态链接库的接口如下:
library WM_IC;uses
classes,SysUtils,
accesscard in 'accesscard.pas';{$R *.res}procedure wm;
begin
wm_create_sset(0,'abcd','ffffffff',2,90.2,3,3,5.5,10,10,10,10);
end;experts
wm;beginend./////////////////
主调函数中声明如下;
procedure wm;stdcall;far;external 'WM_IC.dll' name 'wm_create_sset';///////////////
调用
procedure TForm1.Button1Click(Sender: TObject);
begin
wm;
end;这是为什么啊?我想直接采用前一种方式,由主调函数将参数传给wm_create_sset;
不要用string参数,可以用pchar代替。
参数类型与delphi的字符串内存管理机制有关
最好使用pchar
如果使用string, 须在dll和引用端的工程文件的头部
uses ShareMem , ...
我的参数列表是:
port:integer;
syscode:string;
syskey:string;
meter_kind:byte;
pre_charge:single;
pre_count:cardinal;
user_kind:byte;
alarm:single;
allowhoard:single;
allowdredit:single;
showtime:byte;
valvetime:byte
谢谢楼上各位的帮助!哈哈我先去试试!
我在dll和调用程序中都引用了ShareMem
当我如下调用时,会出错:
procedure TForm1.Button1Click(Sender: TObject);
begin
wm_create_sset(0,'abcd','ffffffff',2,90.2,3,3,5.5,10,10,10,10);
end;
但是这样调用时不会报错:
procedure TForm1.Button1Click(Sender: TObject);
var
str1,str2:string;
begin
str1:='abcd';
str2:='ffffffff';
wm_create_sset(0,str1,str2,2,90.2,3,3,5.5,10,10,10,10);
end;
使用这种方式时,字符串'abcd'和'ffffffff'无法通过str1,str2传入wm_create_sset内部(我在wm_create_sset内部showmessage(str1)时,显示的是空字符串),这是为什么啊?