动态链接库学习笔记
在导入的函数可以用extern声明,也可以用_declspec(dllimport)声明。
例如:_declspec(dllimport) int add(int a,int b);
通过dumpbin –exports DLL.dll来查看导出的动态链接库的函数。
若系统提示dumpbin不是系统的命令,则需要注册dumpbin环境变量,打开VC安装目录的bin文件夹,里面有vcvars32.bat注册环境变量。
HWND GetForegroundWindow()得到当前工作窗口的句柄。
使用windowsAPI函数,需要包含<windows.h>
同样用动态链接库导出类的情况
_declspec(dllexport)class Point{
};
若只导出类中的某个成员函数,则
Class Point{
Public:
_declspec(dllexport) void output(int x,int y);
};
2、若要导出的函数名字不发生改变,可以用extern“C”来声明函数,用extern “C”做声明只能对全局函数,不能是类的成员函数。
3、若调用约定发生改变,则用extern “C”也不能保证函数名不发生变化,这时增加一个def模块定义文件。
LIBRARY DLL 注意要和动态链接库文件名匹配
EXPORTS
Add
Subtract
4、动态链接库可以隐式连接,也可以动态加载
隐式链接需要加载lib库和dll文件。
动态加载方式:
HINSTANCE hInst;
hInst=LoadLibrary(L"DLL.dll");
typedef int (*ADDPROC)(int a,int b);
ADDPROCAdd=(ADDPROC)GetProcAddress(hInst,"add");
可以再需要的时候加载动态链接库。