编写C++的Dll动态库编写C++的Dll动态库编写C++的Dll动态库
一 dll入口函数介绍
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
/*
一个动态库可以被多个应用程序共享
但它只被加载(映射)一次
*/
// dll程序入口
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:// 在第一次加载动态库到系统的时候,只触发一次
case DLL_THREAD_ATTACH:// 多个应用调用dll的时候触发,可能多次触发
case DLL_THREAD_DETACH:// 多个应用在注销dll使用的时候触发,可能多次触发
case DLL_PROCESS_DETACH:// 在最后销毁动态库的时候触发, 只触发一次
break;
}
return TRUE;
}
二 动态库的类,函数,变量的导出
#pragma once
#define DllApi _declspec(dllexport)// 导出(告诉编译器,该函数开放给外部调用)
DllApi void HelloWorld();
#pragma once
#define DllApi extern "C" _declspec(dllexport)// 导出(告诉编译器,该函数开放给外部调用)
DllApi int Add(int,int);
class _declspec(dllexport) MyClass
{
};
class _declspec(dllexport) MyClass
{
};
三 动态库的加载
方式1:静态加载
方式1.项目属性设置
方式2.#pragma comment (lib,“*.lib”)
方式2:动态加载
步骤1.LoadLibrary
步骤2.GetProcAddress
四 动态库的使用
4.1 创建MFC项目进行dll的引用
加载Dll流程:
4.2.MFC项目添加依赖项
4.3 附加库目录(用于添加动态库.dll或静态库.lib)
4.4 附加包含目录(用于添加头文件.h)
4.5 复制头文件和lib库
4.6 添加testH.h到头文件夹
4.7 代码书写引用
#include "testH.h"
#pragma comment(lib,"Dll1.lib")
void CMFCApplication1Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
sum1 =Add(add1,add2);
UpdateData(false);
}