针对当时初学动态链接、静态链接,有些文档整理一下发出来算是给自己和读者一个小结。

首先创建DLL

编辑头文件

dllmain.h 头文件:

#pragma once
#if defined(_DLL_API)
#ifndef DLL_API
#define DLL_API __declspec(dllexport)
#endif
#else
#define DLL_API __declspec(dllimport)
#endif // !DLL_API
#ifndef _API
#ifdef _MSC_VER
#define _API __stdcall
#else
#define _API
#endif
#endif //导出函数,若要导出函数,必须出现在调用约定关键字的左边(最左边)
DLL_API int add(int a, int b); //导出类,要导出类中的所有公共数据成员和成员函数,必须出现在类名的左边(挨着)
class DLL_API cls
{
public:
int add(int a, int b);
};

stdafx.h 头文件:

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
// #pragma once #include "targetver.h" #define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
// Windows 头文件:
#include <windows.h> // TODO: 在此处引用程序需要的其他头文件

targetver.h 头文件:

#pragma once

// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。

// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 #include <SDKDDKVer.h>

编辑实现方法

dllmain.cpp:

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"
#include "dllmain.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;
//} int add(int a,int b)
{
return a + b;
} int cls::add(int a,int b)
{
return a + b;
}

mydll_1.cpp:

// mydll_1.cpp: 定义 DLL 应用程序的导出函数。
// #include "stdafx.h"

stdafx.cpp:

// stdafx.cpp : 只包括标准包含文件的源文件
// mydll_1.pch 将作为预编译标头
// stdafx.obj 将包含预编译类型信息 #include "stdafx.h" // TODO: 在 STDAFX.H 中引用任何所需的附加头文件,
//而不是在此文件中引用

最后检查配置

配置中“配置类型”选【动态库.dll】,理想状态点击【生成】即可生成相应dll文件。

其次调用该dll

编辑头文件

stdafx.h:

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
// #pragma once #include "targetver.h" #include <stdio.h>
#include <tchar.h> // TODO: 在此处引用程序需要的其他头文件

targetver.h:

#pragma once

// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。

// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。 #include <SDKDDKVer.h>

编辑实现方法

mytest_1.cpp:

// mytest_1.cpp: 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "dllmain.h"
#include <iostream>
#include <windows.h>
int main()
{
std::cout << add(2, 6) << std::endl;
system("pause");
return 0; }

stdafx.cpp:

// stdafx.cpp : 只包括标准包含文件的源文件
// mytest_1.pch 将作为预编译标头
// stdafx.obj 将包含预编译类型信息 #include "stdafx.h" // TODO: 在 STDAFX.H 中引用任何所需的附加头文件,
//而不是在此文件中引用

检查配置信息

要选择【应用程序.exe】,其他配置默认,顺利的话能生成对应exe可执行文件。

最后检验

将生成的动态链接库dll放入可执行文件exe的目录中,两者必须在一个目录中,双击运行exe,得结果如下:



如果同目录下缺少dll,则显示如下:

PS

很多细节可能未说明,有问题或者缺少的内容会及时更改,感谢阅读!

C++最基本调用动态链接库dll方法的小结的更多相关文章

  1. BCB如何编写,调用动态链接库DLL

    一 编写动态链接库DLL DLL简称动态链接库,是Windows中程序的重要组成部分.想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程序分为好几个模块,团队每一个成员开发一个 ...

  2. P/Invoke之C#调用动态链接库DLL

    本编所涉及到的工具以及框架: 1.Visual Studio 2022 2..net 6.0 P/Invok是什么? P/Invoke全称为Platform Invoke(平台调用),其实际上就是一种 ...

  3. LR调用动态链接库DLL

    什么是动态库? 动态库一般又叫动态链接库(DLL),是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库. 动态链接提供了一种方法 ,使进程可以 ...

  4. ASP.net/C#中如何调用动态链接库DLL

    动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文 ...

  5. c# 调用c++DLL方法及注意事项

    引用命名空间 using System.Runtime.InteropServices 调用方法: 一.静态加载 用DllImprot方式来加载c++DLL.如下格式: //对应c++方法 //voi ...

  6. C# 调用 C++ DLL方法

    在C# 中,可以通过 DllImport 调用C++ 的非托管DLL程序. VS2010中C#调用C++的DLL示例: 一.新建C++ DLL程序 1.新建 C++ Win32项目,类型为DLL. 生 ...

  7. unity调用c++ dll方法介绍

    摘要 unity用的很普遍,现在很多代码还是用c++写的,需要用unity去调用c++的代码.这里介绍了一种unity调用c++ dll的方法,希望有所帮助. 我采用的软件是Visual Studio ...

  8. 可执行Jar包调用动态链接库(DLL/SO)

    踩过了很多的坑,查了很多资料,在此记录一下,以SpringBoot项目为基础. Maven加入JNA依赖 <!-- JNA start --> <dependency> < ...

  9. JAVA调用动态链接库(dll)

        菜鸡爬坑 基础知识  因为某个东西的keygen我只会在win下生成!! 所以只能出此下策!!之前一直是android下用jni调用so文件,现在试下java在win平台下调用dll 首先还是 ...

  10. ocx控件 编译成C#调用的dll 方法 转

      打开VS命令提示行 1.注册ActiveX控件(带上 VCbox.ocx的路径) regsvr32  VCbox.ocx 2.编译OCX文件 aximp VCbox.ocx 生成两个dll文件,项 ...

随机推荐

  1. 【分享】记一次项目迁移(docker java | docker python)

    项目:前端Vue3,后端Python+Java,数据库Redis+MySQL 原先部署在centos7里面的,使用的宝塔面板部署的,还算方便. 但是服务器要到期了,要将项目迁移到另外一台服务器. 另外 ...

  2. 【软件工程与UML】第1章 笔记和练习题

    基本概念 软件 = 程序 + 数据 + 文档 软件的特点 抽象性:软件是一种逻辑实体 可复制性:软件是通过人们智力活动,把知识和技术转化为信息的一种产品. 不会磨损: 依赖性:软件的开发和运行经常收到 ...

  3. linux su命令卡顿,linux su特别慢问题排查

    问题:发现同机房两台同网络域的主机,一台su用户正常,一台每次都需要等5s左右. 进展:杂事儿太多没深入排查,后续又发现了几台有同样问题的主机.非常影响效率.开始入手排查 分析: 1.之前遇到过类似问 ...

  4. idea中terminal的配置

    idea中terminal的配置流程: File->settings->Tools->terminal 然后根据需要进行配置: 显示git操作界面 Shell path ==> ...

  5. Ubuntu终端输入异常、无法退格(删除文本)、使用方向键命令

    1 起因 为了学习嵌入式开发安装去安装的ncurses库,使用命令:sudo apt-get install libncurses5-dev导致系统自带的ncurses-base被自动删除. 2 出现 ...

  6. 启用Linux防火墙日志记录和分析功能

    防火墙的基本功能是阻止来自可疑网络/来源的连接.它会检查所有连接的源地址.目的地址和端口,并决定是否允许或阻止流量.防火墙的每个操作都会记录为日志数据.监控和分析这些日志对于保护您的网络免受攻击至关重 ...

  7. Qt编写ERP库存库房发货电子看板

    一.前言 有了之前可视化大屏电子看板系统的经验,要做这个ERP库存库房发货电子看板,可以说是水到渠成轻车熟路,技术难度比之前做过的各种大屏系统的子模块都要简单.由于库存库房发货数据的特殊性,基本上都是 ...

  8. Idea中@Autowired 黄色波浪线问题以及注入类显示红色波浪线问题解决

    解决办法: 点开路径:File--->Settings--->Editor--->Inspections--->Spring--->Spring core--->C ...

  9. IM扫码登录技术专题(三):通俗易懂,IM扫码登录功能详细原理一篇就够

    本文引用了作者"大古同学"的"二维码扫码登录是什么原理"一文的主要内容,为了更好的理解和阅读,即时通讯网收录时有修订和改动,感谢原作者的分享. 1.引言 自从微 ...

  10. Web网页端IM产品RainbowChat-Web的v4.1版已发布

    一.关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIM ...