社区
Delphi
帖子详情
dll动态调用dll传参数的问题
sknighty
2006-10-23 11:10:53
需要在一个a.dll中动态调用另一个b.dll,a.dll中有方法 get(i:integer):stdcall;在这个方法中调用了b.dll中的方法send(i:integer;str:string):stdcall,可是sendzhong的参数i怎么也得不到get传过来得参数i,是怎么一会事.
...全文
161
7
打赏
收藏
dll动态调用dll传参数的问题
需要在一个a.dll中动态调用另一个b.dll,a.dll中有方法 get(i:integer):stdcall;在这个方法中调用了b.dll中的方法send(i:integer;str:string):stdcall,可是sendzhong的参数i怎么也得不到get传过来得参数i,是怎么一会事.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
do2008
2006-10-24
打赏
举报
回复
>>我跟啦
>>调用都正确,exe调用get有参数,但在get函数中显示i的值为空;
应该是dll函数的类型没有声明对,或者有可能是exe没有正确的加载dll,
楼主,打开dll的project,然后设置好host application 为你的exe,
然后在get函数中下个断点,看看exe调用get(5),为什么会没有传进来
ly_liuyang
2006-10-24
打赏
举报
回复
DLL接口不要用String!
用PChar的
sknighty
2006-10-24
打赏
举报
回复
Tgeturl=procedure(KeyWord,hIp: string; Fmaxpagecount,hport: integer);stdcall;
var
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
到底怎么一会事,搞不明白
sknighty
2006-10-23
打赏
举报
回复
我跟啦
调用都正确,exe调用get有参数,但在get函数中显示i的值为空;
入
外部exe中
get(5)
get函数这样
get(i:integer);stdcall;
var
m:integer;
begin
m:=i;
end;
m的值为空;
do2008
2006-10-23
打赏
举报
回复
一步一步跟综测试
1.检查你的外部exe调用a.dll的get(i:integer),i 是否已经传进去了
2.检查a.dll的get函数,对b.dll的send函数调用是否正确~~~
newfang
2006-10-23
打赏
举报
回复
不明白你是具体怎么传的~~两个DLL是不能共享全局变量的!
可以通过消息传递或者通过函数返回值!
SuanAddMiao
2006-10-23
打赏
举报
回复
你用的是过程,而不是函数,所以没有返回值。楼主先把process和function搞清楚。
DLL
调用
(2):C++
动态
调用
DLL
动态
调用
也被称为显示
调用
,即在运行程序过程中,需要
调用
DLL
中的功能时才
调用
。相对于隐式
调用
,此种方式会有明确的语句载入
DLL
和获取其中的函
数
地址,
调用
过程相对静态
调用
会复杂一些,但不需要LIB文件的支持,仅有
DLL
文件即可。
动态
库
DLL
文件的
动态
调用
和静态
调用
参考百度百科和C++
调用
DLL
有两种方法—静态
调用
&
动态
调用
库文件一般指计算机上的一类文件,分两种,一种是静态库,另一种是
动态
库即
DLL
(Dynamic Link Library)文件,又叫
动态
链接库文件。静态库和
动态
库的区别是:静态库在程序的链接阶段被复制到了程序中;
动态
库在链接阶段没有被复制到程序中,而是程序在运行时由系统
动态
加载到内存中供程序
调用
。使用
动态
库的优点是系统只需载入一次
动态
库,不同的程序可以得到内存中相同的
动态
库的副本,因此节省了很多内存,而且使用
动态
库也便于模块化更新程序。 一
VS下
动态
库
dll
的显式
调用
(
动态
调用
)
VS下
动态
库
dll
的显式
调用
动态
库的加载分两种形式:分为静态加载和
动态
加载。静态加载时,对应的头文件、
DLL
,和LIB缺一不可,并且生产的EXE没有找到
DLL
文件就会导致“应用程序初始化失败”。
动态
加载只需要
dll
,通过LoadLibrary()函
数
进行加载,但该方式对生成的
dll
的规范有一定的要求否则容易出错。
Dll
的
动态
调用
常规代码如下: //#include #include
python
调用
dll
传指针参
数
python
调用
dll
传指针参
数
java
调用
DLL
动态
库
java
调用
dll
动态
库
Delphi
5,379
社区成员
262,722
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章