type
Tdes=procedure(var data :pchar;var key:pchar; readlen:integer )cdecl;procedure TForm1.Button1Click(Sender: TObject);
var
Handle:Thandle;
FPointer:TFarProc;
MyFunc: Tdes;
p1,p2:String;
p3:integer;
buffer:pointer;
begin
p1:='sss';
p2:='123';
p3:=3; Handle:=LoadLibrary('des.dll');
if Handle>0 then
begin
try
FPointer:=GetProcAddress(Handle,PChar('des')); //获得函数地址
if FPointer<>nil then
begin
MyFunc:=Tdes(FPointer);
MyFunc(pchar(p1),pchar(p2),p3); //主要就是这句,传入一个数据p1后,C里要用这个地址回传,可我不知DELPHI怎么处理这种UN CHAR*型,
edit1.text:=p1; //这开始报地址错
end
else
messagebox(0,'Funtion Add not found','Warning',MB_OK);
finally
FreeLibrary(Handle);
end;
end
else
messagebox(0,'DllName not found','Warning',MB_OK);
end;
Tdes=procedure(var data :pchar;var key:pchar; readlen:integer )cdecl;procedure TForm1.Button1Click(Sender: TObject);
var
Handle:Thandle;
FPointer:TFarProc;
MyFunc: Tdes;
p1,p2:String;
p3:integer;
buffer:pointer;
begin
p1:='sss';
p2:='123';
p3:=3; Handle:=LoadLibrary('des.dll');
if Handle>0 then
begin
try
FPointer:=GetProcAddress(Handle,PChar('des')); //获得函数地址
if FPointer<>nil then
begin
MyFunc:=Tdes(FPointer);
MyFunc(pchar(p1),pchar(p2),p3); //主要就是这句,传入一个数据p1后,C里要用这个地址回传,可我不知DELPHI怎么处理这种UN CHAR*型,
edit1.text:=p1; //这开始报地址错
end
else
messagebox(0,'Funtion Add not found','Warning',MB_OK);
finally
FreeLibrary(Handle);
end;
end
else
messagebox(0,'DllName not found','Warning',MB_OK);
end;
...
MyFunc(pchar(p1),pchar(p2),p3);
试试。
MyFunc(p1,p2,p3);
不要用string;如果用string你一定要指定长度
....
edit1.text:=strpas(p1); 注意是不是cdecl 的調用格式!!!
type
Tdes=procedure(var data :pchar;var key:pchar; readlen:integer )cdecl;
procedure TForm1.Button1Click(Sender: TObject);
var
Handle:Thandle;
FPointer:TFarProc;
MyFunc: Tdes;
p3:integer;
l1:PPoint;
buffer:pointer;
p1: array [0..100] of char;
p2: array [0..100] of char;
p5,p6:pchar;begin p1:='sss';
p2:='123';
p3:=3;
p5:=p1;
p6:=p2; Handle:=LoadLibrary('des.dll');
if Handle>0 then
begin
try
FPointer:=GetProcAddress(Handle,PChar('des')); //获得函数地址
if FPointer<>nil then
begin
MyFunc:=Tdes(FPointer);
MyFunc(p5,p6,p3);
edit1.text:=strpas(p5);
end
else
messagebox(0,'Funtion Add not found','Warning',MB_OK);
finally
FreeLibrary(Handle);
end;
end
else
messagebox(0,'DllName not found','Warning',MB_OK);
end;