主题:[讨论]工程中怎样调用动态库中的函数?
zlhhz
[专家分:710] 发布于 2006-06-07 21:54:00
工程一(win32 dll)中生成了abc.dll,导出了函数add(int a,int b);
工程二(win32 exe)中调用abc.dll中的函数add(int a,int b);
请问要设置那些参数?
回复列表 (共7个回复)
沙发
aaronwang [专家分:16870] 发布于 2006-06-08 08:35:00
LoadLibrary
GetProcAddress
板凳
zlhhz [专家分:710] 发布于 2006-06-08 12:49:00
我不想用这种方式,像直接调用api函数那样,用
#pragma comment(lib,"abc.lib")
再加上函数原形声明 int add(int a,int b);
但是老是出错,debug编译下可以通过
Release编译下却通不过,显示:无法解析的外部符号
3 楼
xin5439 [专家分:570] 发布于 2006-06-08 18:08:00
如果使用你的这种调用方式,规范的做法是:将你工程一中的abc.lib和abc.h(导出函数声明文件)拷到你的工程二中,并在#pragma comment(lib,"abc.lib")前加
#include "abc.h",当然要将abc.dll放到你工程二中releas或debug目录下作运行时使用
4 楼
zlhhz [专家分:710] 发布于 2006-06-08 19:09:00
那静态调用(使用lib)和动态调用(使用LoadLibrary)各有什么区别(实质、内存占用、软件依赖性等)?
5 楼
xin5439 [专家分:570] 发布于 2006-06-08 20:43:00
DLL分两种调用方式:动态和静态。动态又包括显示和隐示,显示调用就是代码中写LoadLibrary,隐示调用(就是你采用的)相当于借用和该dll搭配的lib进行函数调用;区别在于隐示调用的话在程序的一开始就会自动载入dll,而显示调用则会在程序第一次出现LoadLibrary(你的dll文件)处才载入dll.
6 楼
zlhhz [专家分:710] 发布于 2006-06-08 20:52:00
谢谢~
那静态又是怎么回事?
7 楼
InitInstance [专家分:8720] 发布于 2006-06-10 10:24:00
静态连接方式就是在编译时直接把库文件代码加到你的程序里,目标文件膨胀.........
我来回复