dll动态调用dll传参数的问题 需要在一个a.dll中动态调用另一个b.dll,a.dll中有方法 get(i:integer):stdcall;在这个方法中调用了b.dll中的方法send(i:integer;str:string):stdcall,可是sendzhong的参数i怎么也得不到get传过来得参数i,是怎么一会事. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一步一步跟综测试1.检查你的外部exe调用a.dll的get(i:integer),i 是否已经传进去了2.检查a.dll的get函数,对b.dll的send函数调用是否正确~~~ 我跟啦调用都正确,exe调用get有参数,但在get函数中显示i的值为空;入外部exe中get(5)get函数这样get(i:integer);stdcall;varm:integer;begin m:=i;end;m的值为空; 你用的是过程,而不是函数,所以没有返回值。楼主先把process和function搞清楚。 不明白你是具体怎么传的~~两个DLL是不能共享全局变量的!可以通过消息传递或者通过函数返回值! >>我跟啦>>调用都正确,exe调用get有参数,但在get函数中显示i的值为空;应该是dll函数的类型没有声明对,或者有可能是exe没有正确的加载dll,楼主,打开dll的project,然后设置好host application 为你的exe,然后在get函数中下个断点,看看exe调用get(5),为什么会没有传进来 Tgeturl=procedure(KeyWord,hIp: string; Fmaxpagecount,hport: integer);stdcall;vargeturl:Tgeturl;procedure TForm1.Button1Click(Sender: TObject);var Fhand:Thandle;begin Fhand:=loadlibrary('aa.dll'); @geturl:=getprocaddress(fhand,'Geturl'); geturl(trim(edit1.Text),'192.161.56.29',1,5096); freelibrary(fhand);end;Tsend =function(port:integer; url, siteurl, sitename, song, singer, special, ip:string): boolean; stdcall;var sendstr: Tsend;procedure Geturl(KeyWord,hIp: string; Fmaxpagecount,hport: integer);var ip:string; i,port: Integer; Fhandle: Thandle;begin showmessage(inttostr(hport)); 这里显示不是5096 ip:=hip; port:=hport; showmessage(ip); 这里显示不是'192.161.56.29' showmessage(keyword); 这个显示正常即(edit1.Text)的值 showmessage(inttostr(Fmaxpagecount)); 这里显示是0不是1 try Fhandle := loadlibrary(pchar('send.dll')); @sendstr := Getprocaddress(Fhandle, 'sendstr'); if sendstr(port, url, siteurl, sitename, song, singer, special, ip)then到底怎么一会事,搞不明白 DLL接口不要用String!用PChar的 access 转为SQL数据库问题 大家来看看我的软件(AutoFlowchart,根据源码自动生成流程图!) 为什么用Tdcomconnection组件做C/S客户端连接时,C与S在一台机子上可以,做是把S放在其它机子上时就不能访问了? 怎么样修改字段的长度 多进程访问---? 在线等待.... 怎么画出鼠标指针? 那位哥们帮看一下吧。我实在找不到错误在那里,提示错误是“insert into语法错误” SkinEngine 和DynamicSkinForm 的两个问题 Canvas上的字符串怎么换行? 大家帮忙看看这个编译警告是什么意思? 求助:如何防止deliph开发的程序运行进程被杀
调用都正确,exe调用get有参数,但在get函数中显示i的值为空;
入
外部exe中
get(5)get函数这样get(i:integer);stdcall;
var
m:integer;
begin
m:=i;
end;
m的值为空;
可以通过消息传递或者通过函数返回值!
>>调用都正确,exe调用get有参数,但在get函数中显示i的值为空;应该是dll函数的类型没有声明对,或者有可能是exe没有正确的加载dll,楼主,打开dll的project,然后设置好host application 为你的exe,然后在get函数中下个断点,看看exe调用get(5),为什么会没有传进来
geturl:Tgeturl;procedure TForm1.Button1Click(Sender: TObject);
var
Fhand:Thandle;
begin
Fhand:=loadlibrary('aa.dll');
@geturl:=getprocaddress(fhand,'Geturl');
geturl(trim(edit1.Text),'192.161.56.29',1,5096);
freelibrary(fhand);
end;
Tsend =function(port:integer; url, siteurl, sitename, song, singer, special, ip:string):
boolean; stdcall;
var
sendstr: Tsend;procedure Geturl(KeyWord,hIp: string; Fmaxpagecount,hport: integer);
var
ip:string;
i,port: Integer;
Fhandle: Thandle;
begin
showmessage(inttostr(hport)); 这里显示不是5096
ip:=hip;
port:=hport;
showmessage(ip); 这里显示不是'192.161.56.29'
showmessage(keyword); 这个显示正常即(edit1.Text)的值
showmessage(inttostr(Fmaxpagecount)); 这里显示是0不是1
try
Fhandle := loadlibrary(pchar('send.dll'));
@sendstr := Getprocaddress(Fhandle, 'sendstr');
if sendstr(port, url, siteurl, sitename, song, singer, special, ip)then
到底怎么一会事,搞不明白
用PChar的