创建Win32 Console空项目,添加文件my_dll_main.cpp,把sum.lib sum.dll复制到该项目下
//my_dll_main.cpp //#define APIENTRY WINAPI //#define WINAPI __stdcall /* BOOL WINAPI DllMain( _In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved ); */ #include <stdio.h> #include <stdlib.h> #include <windows.h> #pragma comment(lib,"sum.lib") typedef int(__stdcall *lpAddFunc)(int,int); //宏定义函数指针类型 int main(int argc, char *argv[]) { HINSTANCE hDll; //DLL 句柄 lpAddFunc addFunc; //函数指针 hDll = LoadLibrary("sum.dll"); if(hDll != NULL) { //addFunc = (lpAddFunc)GetProcAddress(hDll,"add"); addFunc = (lpAddFunc)GetProcAddress(hDll, MAKEINTRESOURCE(1)); //MAKEINTRESOURCE 直接使用导出文件中的序号 if(addFunc != NULL) { int result = addFunc(2,3); printf("%d\n", result); system("pause"); } } FreeLibrary(hDll); return 0; }进程中的每个DLL模块被全局唯一的32字节的HINSTANCE句柄标识,只有在特定的进程内部有效,句柄代表了DLL模块在进程虚拟空间中的起始地址。
GetProcAddress(hDll, MAKEINTRESOURCE(1))直接通过.def文件中add函数指定的顺序号访问函数,MAKEINTRESOURCE是一个通过序号获取函数名的宏。
