DLL文件
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include “pch.h”
//声明导出函数->把这个函数导出去
extern “C” __declspec(dllexport) void c();
//用作导出的函数:接口
void c()
{
}
//要做的事
void a()
{
}
//清理
void b()
{
}
BOOL APIENTRY DllMain(HMODULE hModule,
//DLL模块的句柄 handle
DWORD ul_reason_for_call,
//DLLmain被调用的原因
LPVOID lpReserved
//保留项,也就是windows的保留参数
//保留参数,windows不想让我们知道的参数
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//当DLL被进程加载时DLLmain被调用
a();
case DLL_THREAD_ATTACH:
//有线程被创建时DLLmain被调用
case DLL_THREAD_DETACH:
//有线程结束时DLLmain被调用
case DLL_PROCESS_DETACH:
//当DLL被进程卸载时DLLmain被调用
b();
break;
}
return TRUE;
}
导出函数
提供一个接口让外部应用程序去调用
extern "C"
extern "C"的主要作用是为了能够正确实现C++代码调用其他C语言代码,加上extern “C”后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名,而C语言并不支持函数重载,因此编译C语言代码的函数是不会带上函数的参数类型,一般只包括函数名
这个功能十分有用,因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的。为了更好支持原来C代码和已经写好的C语言库,需要在C++中尽可能的支持C,而extern “C”就是其中一个策略
简单来说就是防止编译后函数名被编译器修改或粉碎
主要用在以下情况:
C++代码调用C语言代码
在C++的头文件中使用
在多个人协助开发时,可能有的人比较擅长C语言,而有的人擅长C++,这样的情况下也会有用到
__declspec(dllexport)
声明导出函数,将该函数从DLL开放提供给其他应用程序使用
dllimport/dllexport
dllexport:如果要使函数成为接口的一部分,必须将其他模块中函数的定义声明为dllexport
应用程序与DLL导出函数的通讯方法
静态库
静态库是指在我们的应用中,有一些公共代码是要反复使用,就把这些代码编译为“库”文件,在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库
程序编译一般需经预处理,编译,汇编和链接几个步骤,静态库
MessageBoxA(句柄,显示内容,标题,MB_OK);
句柄可以为NULL,表示当前窗体的句柄。
最后一个参数是显示在提示框中的按钮类型;
MB_ABOKTRETRYIGNORE
MB_OKCANCEI
MB_RETRYCANCEI
MB_YESNO
MB_YESNOCANCEI
MB_OK
可任选一标志