DLL文件的生成与使用
DLL框架
#include <iostream> #include <Windows.h> BOOL APIENTRY DllMain( HMODULE hModule,//表示DLL句柄 DWORD ul_reason_for_call,//表示DLL当前的状态,DLL被加载的原因 LPVOID lpReserved//隐式加载和显示加载 ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH://进程映射 case DLL_THREAD_ATTACH://线程映射 case DLL_THREAD_DETACH://线程卸载 case DLL_PROCESS_DETACH://进程卸载 break; } return TRUE; }
第一个DLL文件
// dllmain.cpp : 定义 DLL 应用程序的入口点。 #include <iostream> #include <Windows.h> using namespace std; /* _declspec可以指定的两个存储类属性是dllimport和dllexport。这些向编译器指示从DLL导入或导出(分别)函数或对象。DLL与客户端的接口 */ _declspec(dllexport) int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } BOOL APIENTRY DllMain( HMODULE hModule,//表示DLL句柄 DWORD ul_reason_for_call,//表示DLL当前的状态,DLL被加载的原因 LPVOID lpReserved//隐式加载和显示加载 ) { if (ul_reason_for_call == DLL_PROCESS_ATTACH) { cout << "Congratulation!DLL is attached!" << endl; } return TRUE; }
将DUMPBIN.EXE路径添加进环境变量之后,输入命令查看导出函数信息
dumpbin -exports DLL2.dll
Microsoft (R) COFF/PE Dumper Version 14.22.27905.0 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file dll2.dll File Type: DLL Section contains the following exports for Dll2.dll 00000000 characteristics FFFFFFFF time date stamp 0.00 version 1 ordinal base 1 number of functions 1 number of names ordinal hint RVA name 1 0 00011177 ?add@@YAHHH@Z Summary 1000 .00cfg 1000 .data 1000 .idata 1000 .msvcjmc 3000 .rdata 1000 .reloc 1000 .rsrc 8000 .text 10000 .textbss
Dll文件的使用
接着,新建一个cpp项目,我们将生成文件中的Dll2.dll和Dll2.lib文件,移动到我们新建项目中。
在cpp中使用显示链接调用
#include <iostream> #pragma comment(lib, "Dll2.lib") _declspec(dllexport) int add(int a, int b); _declspec(dllexport) int sub(int a, int b); using namespace std; int main() { cout << add(12, 13) << endl; cout << sub(12, 12) << endl; system("PAUSE"); return 0; }
也可以在添加lib文件到资源文件中
这样就能够正常调用dll文件了