首先将要调用的动态库拷贝到当前的项目中
定义将要调用动态库中的函数的函数指针
加载动态库
获得需要调用动态库中的函数的地址
使用完这个动态库时要释放这个动态库
例子:
现在有一个adddll动态库,该动态库中有一个求和函数int ADD(int a,int b)
现在一个项目程序中需要调用这个求和函数,该函数的使用步骤如下:
(1)定义一个函数指针:typedef int (Add)(int ,int);
(2)在主程序中加载动态库:
定义一个动态库句柄 HINSTANCE hDLL;
hDLL = LoadLibrary(“adddll”);
(3)获得该函数的在动态库中地址
定义一个ADD函数的函数指针Add add;
Add = (Add)GetProcAddress(hDLL,”ADD”);//获取地址
Int result = Add(a,b);//调用该函数
(4)释放动态库
FreeLibrary(hDLL);
VC++静态库的调用说明
包含库的头文件
在应用程序工程中使用
#include “file path”
file path 可以为绝对路径,也可以为相对工程所在目录的相对路径
如果头文件比较的多,可以在project>setting>c/c++>preprocessor的Additional include directories中填入你的头文件所在的目录
导入lib库
直接用project>add to project>files的方式将lib加入工程
使用#pragma comment(lib,”you lib path and name”);
与前面的头文件一样,也可以不在这里指定路径,而是在project>setting>link>input的Additional lib path 中输入lib文件所在的路径
还可以在project>setting>link>general的object/library modules中输入lib的名字。
编译执行程序,如果是静态库编译后就可直接执行。
如果是动态库,需要将dll放到可执行文件所在的目录下,或者系统目录下,如system32或者windows目录,或者其他任何一个位于环境变量PATH中的目录中。
Note:h头文件是不能编译的,所以lib文件里是不包含h文件的,如果你生成lib文件的源程序里有h文件和cpp(c)文件,除了加入lib文件(上面的三种方法,个人建议第2)种)外,你还需要手动的将h文件加入到新项目里, 如果你生成lib的源代码只有c或cpp文件,则不需要。
是网络上帮您查到的,祝您早日解决问题哦!//第一种方法_静态调用法
1:在DLL的cpp中将函数声明为导出,你已经完成了第一步.
2: 在exe的cpp中加上一句 #pragma comment(lib, "你生成的dll的lib文件") 生成dll后会有一个xxxlib的文件,保存到exe的目录中.
3:声明一种类型,在exe的cpp中声明上面的函数类型.
4:调用函数
//第二种方法动态调用法
1: 在exe的cpp中使用LoadLibary()把我生成的dll载入.
2: 使用typedef int __stdcall (pfunc) (const char , const char , cstring, int) 定义一个函数类型.
3: pfunc funcaddr = GetProcAddrress() 通过GetProcAddress()获取函数的地址.
4: 调用 函数
注意:
你写的代码有点小问题,在导出函数的前面先加上 extern "C" ,这样才能保证dll中的函数名是GenStarPic,否则导出函数的名字会变成一堆乱码,你需要借助LordPe或者depends等工具查看函数名.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)