自动加载
- 在编译时指定DLL,当程序启动运行的时候,会首先加载相关DLL
手动加载
- 在编译时不指定DLL,在运行的时候通过调用
LoadLibrary()
来加载DLL - 相应的,在使用完毕,要使用
FreeLibrary()
来释放DLL
手动加载关注点
- 对于DLL 函数声明的地方加上
extern "C"
mydll.h
1234567891011#ifndef _MYDLL_H#define _MYDLL_H#ifndef MYDLL_EXPORT#define MYDLL _declspec(dllexport)#else#define MYDLL _declspec(dllimport)#endif//声明函数extern "C" MYDLL int Add(int a,int b);//声明函数#endif- 原因
- 在C下面,上面函数Add在DLL里面的symbool可能是Add
- 在C++下面,上面函数Add在DLL里面的symbool可能是Add_int_int,大概是这个意思,就是要区分开
- 作用
- 要求函数Add按照"C"的方式编译
- 代码
- main.cpp
1234567891011121314151617181920212223#include <iostream>#include <winsock2.h>#include <windows.h>using namespace std;int main(){HINSTANCE handle = LoadLibrary("my.dll");if(handle){//定义要找的函数原型typedef int (*DLL_FUNCTION_ADD)(int,int);//找到目标函数的地址DLL_FUNCTION_ADD dll_func = (DLL_FUNCTION_ADD)GetProcAddres(handle,"Add");if(dll_func){//调用函数int result = dll_func(1,2);cout << result << endl;}//卸载FreeLibrary(handle);}}
- main.cpp
- 注意
- 在APP里加载DLL,调用这个函数,APP需要在属性字符集的地方设置为“使用多字节字符集”
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!