• 全部
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API
  • 问答

dll如何调用DLL

Changefish 2010-04-25 11:14:55
想将dll外面再包装一层dll,该如何做,谢谢
...全文
157 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
guanking 2010-04-26
首先要讲清楚静态调用和动态调用的区别。
1 静态调用,在pas文件中直接指定DLL和定义调用函数,在程序开始运行时,就会自动寻找该DLL,并载入内存。
A 即是无论你用不用,都要载入到内存中。
B 如果程序运行时,找不到要载入的DLL,就会报错,无法运行。
C 通常应用在于系统功能关联密切,必须而且经常使用的DLL。

2 动态调用,在程序段中使用LoadLibrary('mydll.dll')加载。
A 在程序开始运行时,不会自动加载,只有在使用时,再通过LoadLibrary加载。
B 因此即使没有该DLL,程序的其他功能还可以使用。只是要用到该DLL,发现没有才会报错。
C 通常应用于对系统功能关联不密切,使用频率低的DLL。当然也有节省内存,优化性能的特点。
D Freelibrary与LoadLibrary要成对使用,是为了保证调用的内存空间有效释放。


例子:

var

Handle:Thandle;

addc:Taddc;

begin

Handle:=LoadLibrary('Testdll.dll');//加载dll

@addc:=GetProcAddress(Handle,'Test'); //取Test函数入口地址,大小写敏感。

if @addc<>nil then

begin

edit1.Text:=IntToStr(addc(10));//参数传递,这里直接用10

end;

Freelibrary(Handle);//从内存释放dll

end;
回复
Harryfin 2010-04-26
跟在主程序里面的写法没啥区别
回复
huangheguyun 2010-04-26
加载到USE UNIT一样进行调用。
回复
hongss 2010-04-26
把DLL当作一个Unit来调用
回复
YFLK 2010-04-26
就象主程序调用DLL那样写代码就行
回复
huboy 2010-04-26
跟一般调用没区别。。。
回复
sibike 2010-04-25
dll外再包层dll,你是指的往dll里再写入资源吗?
回复
很简单啊,在新dll中直接调用老dll就可以
回复
shuaialang 2010-04-25
[Quote=引用 4 楼 sonicer 的回复:]
跟普通的调用没啥区别吧,
[/Quote]

希望跟你说的一样。。。

一会晚上试试。
回复
林石公 2010-04-25
跟普通的调用没啥区别吧,
回复
iqyely 2010-04-25
关注下。没明白啥意思。
回复
shuaialang 2010-04-25
精辟的提问,我也有此需求啊,可能,哈哈,不过还没动手做到那一步。。总能解决的、
回复
发帖
Delphi
创建于2007-08-02

4873

社区成员

Delphi 开发及应用
申请成为版主
帖子事件
创建了帖子
2010-04-25 11:14
社区公告
暂无公告