博弟弟丶 发表于 2021-4-5 19:44

学习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;
}

nanaqilin 发表于 2021-4-5 19:49

兄弟加油,坚持 就是胜利

Gzh4551 发表于 2021-4-5 19:51

想学,但是学了几天就坚持不下去了,有没有好办法

engeng2 发表于 2021-4-5 19:58

楼主是有编程基础的吧:$qqq似乎进度很快啊

博弟弟丶 发表于 2021-4-5 20:22

engeng2 发表于 2021-4-5 19:58
楼主是有编程基础的吧似乎进度很快啊

这都被你看出来了

博弟弟丶 发表于 2021-4-5 20:24

Gzh4551 发表于 2021-4-5 19:51
想学,但是学了几天就坚持不下去了,有没有好办法

要么给钱 要么找人带 这样是最快的看书什么的都是扯淡

博弟弟丶 发表于 2021-4-5 20:25

nanaqilin 发表于 2021-4-5 19:49
兄弟加油,坚持 就是胜利

大家一起加油未来一片光明

zu616 发表于 2021-4-5 21:06


兄弟加油,坚持 就是胜利

哥比彩砖还炫 发表于 2021-4-5 21:24

加油兄弟,我C++都忘光了

aPBB 发表于 2021-4-5 21:51

兄弟一起加油好吧
页: [1] 2 3
查看完整版本: 学习C++的第十六天