dll 中存在一个窗体 窗体的public段中有如下字段 parray:array[0..119] of char;
picindex:Integer;
picname:string;
通过窗体上的按钮对以上三个成员进行赋值
然后通过导出函数将窗体中的三个成员的值传出到宿主程序中,导出函数如下定义
function exprt(parray:pchar;var picindex:Integer;picname:string):Integer;stdcall;
begin
if Fm_main=nil then
begin
fm_main:=TFm_main.Create(Fm_main);
end;
Fm_main.picname:=Trim(picname);
try
Fm_main.ShowModal;
finally
parray:=Fm_main.parray;
picindex:=Fm_main.g_picindex;
Fm_main.Free;
fm_main:=nil;
end;
end;
宿主程序中用的动态调用
function Enroll(parray:pchar;var picindex:Integer;picname:string):Integer;
var
myhandle,myhandle1,myhandle2:Thandle;
myfunc:function (parray:pchar;var picindex:Integer;picname:string):integer;StdCall;
begin
result:=-1;
myhandle1:=loadlibrary('1.dll');
myhandle2:=loadlibrary('2.dll');
myhandle:=loadlibrary('3.dll');
if (myhandle<=0) then
begin
application.MessageBox('找不到 3.dll !','警告');
exit;
end;
try
@myfunc:=getprocaddress(myhandle,'Enroll'); if (@myfunc <> nil) then
begin
result:=myfunc(parray,picindex,picname);
end;
finally
freelibrary(myhandle);
freelibrary(myhandle1);
freelibrary(myhandle2);
end;end;调用的时候
ary:array[0..199] of char;
tmppicindex:integer;
tmppicname:='tmp.bmp';
Enroll(ary,tmppicindex,tmppicname);
最后ary的值无法得到,tmppicindex值可以得到,我试过了在dll中声明 var parray 作为传出参数还是不行,
高手指点!
picindex:Integer;
picname:string;
通过窗体上的按钮对以上三个成员进行赋值
然后通过导出函数将窗体中的三个成员的值传出到宿主程序中,导出函数如下定义
function exprt(parray:pchar;var picindex:Integer;picname:string):Integer;stdcall;
begin
if Fm_main=nil then
begin
fm_main:=TFm_main.Create(Fm_main);
end;
Fm_main.picname:=Trim(picname);
try
Fm_main.ShowModal;
finally
parray:=Fm_main.parray;
picindex:=Fm_main.g_picindex;
Fm_main.Free;
fm_main:=nil;
end;
end;
宿主程序中用的动态调用
function Enroll(parray:pchar;var picindex:Integer;picname:string):Integer;
var
myhandle,myhandle1,myhandle2:Thandle;
myfunc:function (parray:pchar;var picindex:Integer;picname:string):integer;StdCall;
begin
result:=-1;
myhandle1:=loadlibrary('1.dll');
myhandle2:=loadlibrary('2.dll');
myhandle:=loadlibrary('3.dll');
if (myhandle<=0) then
begin
application.MessageBox('找不到 3.dll !','警告');
exit;
end;
try
@myfunc:=getprocaddress(myhandle,'Enroll'); if (@myfunc <> nil) then
begin
result:=myfunc(parray,picindex,picname);
end;
finally
freelibrary(myhandle);
freelibrary(myhandle1);
freelibrary(myhandle2);
end;end;调用的时候
ary:array[0..199] of char;
tmppicindex:integer;
tmppicname:='tmp.bmp';
Enroll(ary,tmppicindex,tmppicname);
最后ary的值无法得到,tmppicindex值可以得到,我试过了在dll中声明 var parray 作为传出参数还是不行,
高手指点!
之间是否可以直接赋值?
在dll中建议不要使用string类型改用pchar类型
>>另外 parray:array[0..199] of char 和 pchr:pchar
var
parray:array[0..199] of char;
pchr:pchar;
begin
parray:='fdasfdsafdsa';
pchr:=parray;
showmessage( string(pchr[1]) );
end;