vs环境下DLL创建和使用
程序员文章站
2024-02-14 14:13:34
...
环境:win10+visual studio2019
创建DLL文件
方式1:
1.新建动态链接库项目
2.
3.创建cpp文件DllDemo.cpp
#include "pch.h"
#include <Windows.h>
extern "C" _declspec(dllexport) void msg_show(char* content);
void msg_show(char* content)
{
MessageBoxA(NULL, content, "", MB_OKCANCEL);
}
4.直接生成dll文件。
方式2:
1.新建空项目
2.
3.在项目属性->常规->配置类型改为动态库
4.创建cpp文件DllDemo.cpp
#include <Windows.h>
extern "C" _declspec(dllexport) void msg_show(char* content);
void msg_show(char* content)
{
MessageBoxA(NULL, content, "", MB_OKCANCEL);
}
5.直接生成dll文件。
注:一般dll输出函数前需要加上extern “C”,因为C++的函数重载,所以如果不指明编译器按C语言的方式编译,则编译出来的函数名会发生变化,在动态调用DLL的时候直接使用之前生命的函数名就会返回无效,当然如果你知道C++的编译规则,直接使用编译器修改的函数名,也是可以的。
使用DLL文件
方式1:静态调用
1.创建一个空项目,添加cpp文件main.cpp
#pragma comment(lib,"DllDemo.lib")
_declspec(dllimport) void msg_show(char*);
int main(void)
{
msg_show((char*)"ceshi");
}
2.将上面生成的DllDemo.lib文件放在exe项目工程的同一目录下,将生成的DllDemo.dll文件放在生成的exe文件的同一目录下。
方式2:动态调用
动态调用只需要dll文件,不要对应的lib文件
#include <Windows.h>
#include <iostream>
int main(void)
{
HMODULE hdll = LoadLibraryA("DllDemo.dll");
if (!hdll)
{
std::cout << "no invilad";
}
else
{
typedef void(*msg)(char*, char*);
msg msg_show = (msg)GetProcAddress(hdll, "msg_show");
if (!msg_show)
std::cout << "no invalid1";
else
msg_show((char*)"title",(char *)"ceshi123");
}
}