DLL文件就是动态库文件,搞个例子就懂了,搞两个工程,一个工程生成DLL,一个工程调用DLL。
生成DLL工程
打开Visual Studio 2019,版本高了可能不行,创建新项目。
搜索DLL,动态链接库。
给项目起个名字
生成DLL的工程的源文件,DllMain本来是有的,我们不用管它,在下面加个Add_Func,。
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#define MYDLL_EXPORTS
#include "MakeDll.h"
#include "pch.h"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:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;
}DLLTYPE int Add_Func(int a, int b) {return (a + b);
}
加一个头文件MakeDLL.h
#ifndef MAKEDLL_H
#define MAKEDLL_H
#pragma once#ifdef MYDLL_EXPORTS
#define DLLTYPE extern "C" __declspec(dllexport)
#else
#define DLLTYPE __declspec(dllimport)
#endif//声明自定义函数
DLLTYPE int Add_Func(int a, int b);#endif
#pragma once
对着工程右键->重新生成,下面就会提示把DLL文件生成到了哪里。
调用DLL工程
新建一个控制台工程
起名字
将生成DLL工程生成的DLL文件复制到调用DLL工程的路径下
这个工程就只需要一个源文件就行
// CallDLL.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <Windows.h>
#include <tchar.h>using namespace std;int main()
{HINSTANCE handle = LoadLibrary(_T("MakeDLL.dll"));//加载dll ,需要加上头文件tchar.h并在调用时加上_T 由句柄指向dll文件cout << "Dll Adddr:" << handle << endl;if (handle){typedef int(*Add_API_Type) (int, int);Add_API_Type add_API_Point = (Add_API_Type)GetProcAddress(handle, "Add_Func"); //GetProcAddress获取dll中的Add_Func函数,用add_API_Point指向函数它cout << "dll 函数的句柄返回值:" << add_API_Point << endl;//打印dll的函数句柄地址值,不为0就说明调用成功if (add_API_Point){int result = (*add_API_Point)(10, 50); cout << "结果:" << result << endl;FreeLibrary(handle); //释放句柄}}return 0;
}// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu
ctrl + F5 执行成功