学习C++的第十六天
本帖最后由 博弟弟丶 于 2021-4-5 19:47 编辑#include <Windows.h>
#include <iostream>
typedef void(*ccc)();//这里要根据DLL里面定义的返回值和参数是怎么定义的不能乱定义
int main() {
HMODULE hmod=LoadLibrary("D:\\C++日常练习代码\\显示调用DLL\\Debug\\Dll1.dll");//模块的名称。这可以是库模块(.dll文件)或可执行模块(.exe文件)。//关于LoadLibrary这个函数 DLL最好是跟EXE放在同一目录下面。
if (hmod)//判断一下
{
MessageBox(NULL, "模块加载成功", "提示框", MB_OK);//加载成功之后肯定就要调用这个DLL
ccc cc=(ccc)GetProcAddress(hmod, "a");//从指定的动态链接库 (DLL) 检索导出的函数或变量的地址。
if (cc)//判断是否成功成功就可以调用了
{
MessageBox(NULL, "DLL加载成功", "提示框", MB_OK);//加载成功之后肯定就要调用这个DLL
cc();//调用成功了 还有最后一步那就是卸载
}
FreeLibrary(hmod);//释放加载的动态链接库 (DLL)或者说卸载加载中的DLL的
}
return 0;
//这种属于显示调用 相比隐式调用显示调用更加灵活和方便和维护
};
DLL 我是这样定义的看下面
#include "pch.h"
extern "C" _declspec(dllexport) void a();//按照C的约定方式导出 无返回值的 a 而a里面只有一个Messgbox信息框
void a() {
MessageBox(NULL, "信息框调用成功", "提示框", MB_OK);
};
BOOL APIENTRY DllMain( HMODULE hModule,
DWORDul_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;
} 兄弟加油,坚持 就是胜利 想学,但是学了几天就坚持不下去了,有没有好办法 楼主是有编程基础的吧:$qqq似乎进度很快啊 engeng2 发表于 2021-4-5 19:58
楼主是有编程基础的吧似乎进度很快啊
这都被你看出来了 Gzh4551 发表于 2021-4-5 19:51
想学,但是学了几天就坚持不下去了,有没有好办法
要么给钱 要么找人带 这样是最快的看书什么的都是扯淡 nanaqilin 发表于 2021-4-5 19:49
兄弟加油,坚持 就是胜利
大家一起加油未来一片光明
兄弟加油,坚持 就是胜利 加油兄弟,我C++都忘光了 兄弟一起加油好吧