回 帖 发 新 帖 刷新版面

主题:[讨论]工程中怎样调用动态库中的函数?

工程一(win32 dll)中生成了abc.dll,导出了函数add(int a,int b);
工程二(win32 exe)中调用abc.dll中的函数add(int a,int b);


请问要设置那些参数?

回复列表 (共7个回复)

沙发

LoadLibrary
GetProcAddress

板凳

我不想用这种方式,像直接调用api函数那样,用

#pragma comment(lib,"abc.lib")

再加上函数原形声明 int add(int a,int b);

但是老是出错,debug编译下可以通过
Release编译下却通不过,显示:无法解析的外部符号

3 楼

如果使用你的这种调用方式,规范的做法是:将你工程一中的abc.lib和abc.h(导出函数声明文件)拷到你的工程二中,并在#pragma comment(lib,"abc.lib")前加
#include "abc.h",当然要将abc.dll放到你工程二中releas或debug目录下作运行时使用

4 楼

那静态调用(使用lib)和动态调用(使用LoadLibrary)各有什么区别(实质、内存占用、软件依赖性等)?

5 楼

DLL分两种调用方式:动态和静态。动态又包括显示和隐示,显示调用就是代码中写LoadLibrary,隐示调用(就是你采用的)相当于借用和该dll搭配的lib进行函数调用;区别在于隐示调用的话在程序的一开始就会自动载入dll,而显示调用则会在程序第一次出现LoadLibrary(你的dll文件)处才载入dll.

6 楼

谢谢~
那静态又是怎么回事?

7 楼

静态连接方式就是在编译时直接把库文件代码加到你的程序里,目标文件膨胀.........

我来回复

您尚未登录,请登录后再回复。点此登录或注册