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

首先创建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. 【分块】LibreOJ 6277 数列分块入门1

    前言 分块是一种优雅的暴力,将数组按块长 \(\sqrt{n}\) 进行分块,可实现区间加法.区间求和和区间逆序对计数等场景,进行 \(m\) 次操作的时间复杂度:\(O(m\sqrt{n})\). ...

  2. HttpClient初步理解

    昨天做完网站项目,就立刻接到了接口的项目,遇到了httpclient,因为毕业不久,遇到这块所以特此留下理解 HttpClient介绍 概念: HTTP 协议可能是现在 Internet 上使用得最多 ...

  3. 使用 Windows Debugger 调试托管代码

    使用 Windows Debugger 调试托管代码 https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugg ...

  4. python中replace不能把 \n 替换过去

    问题 简要描述:python中,字符串的 replace 不能把 \n 符号带过去 截图说明 暂时的解决办法 在replace之前,先把要替换的字符串的 \n 去掉

  5. localhost 宿主机访问

    ssh -N -f -L localhost8888:localhost:8888 hostname

  6. Qt血的教训/细数Qt开发的各种坑/又爱又恨/欢迎围观留言评论

    一.吐槽总结 搞Qt开发十几年了,最初从Qt4.6开始,一直追新到现在的6.7版本,中间经历过无数的血的教训,简直是又爱又恨.其实Qt挺好的,但是还是要忍不住吐槽一下,本人还是希望Qt发展的越来越好, ...

  7. Qt音视频开发18-海康sdk回调

    一.前言 海康sdk显示实时视频流除了支持句柄方式以外,也支持回调的方式拿到每一张图片自己绘制处理,当然回调除了拿到视频数据,其实音频数据也一块拿到了,自行调用音频设备播放就行,关于海康sdk回调这块 ...

  8. 多语言越狱很棒!😊MULTILINGUAL JAILBREAK CHALLENGES IN🧜‍♀️LARGE LANGUAGE MODELS

    写这篇的时候第一次认识到了附录内容的重要性(bushi只是这篇读了全部的附录),它可以让你明确文章全部的实验,并且其中包含很多辅助你对正文理解的表格 禁止盗用,侵权必究!!!欢迎大家积极举报

  9. _findnext()调试中断,发生访问错误,错误定位到ntdll.dll

    问题: 采用_findfirst和_findnext获取指定的文件夹下的文件时,_findnext()函数在调试时发生中断,发生访问错误,错误定位到ntdll.dll.错误提示如下所示: _findn ...

  10. 从新手到专家:如何设计一套亿级消息量的分布式IM系统

    本文原作者Chank,原题"如何设计一个亿级消息量的 IM 系统",为了提升内容质量,本次有修订和改动. 1.写有前面 本文将在亿级消息量.分布式IM系统这个技术前提下,分析和总结 ...