vs2022 c++实现dll创建和调用

vs2022 c++实现dll创建和调用

vs2022 c++实现dll创建和调用vs2022 c++实现dll创建和调用

文件创建使用vs2022的c++dll模板创建一个文件,其中模板信息如下;

12345678910111213// dllmain.cpp : 定义 DLL 应用程序的入口点。#include "pch.h" // 预编译头文件BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: // DLL 被加载到进程时调用 case DLL_THREAD_ATTACH: // 新线程被创建时调用 case DLL_THREAD_DETACH: // 线程被终止时调用 case DLL_PROCESS_DETACH: // DLL 从进程中卸载时调用 break; } return TRUE; // 返回 TRUE 表示已成功处理}

新建一个头文件以及源文件

头文件的代码如下:

12345678910111213141516171819202122232425262728293031323334353637#pragma once// 检查是否在编译 DLL#ifdef _EXPORTING#define _DLL_API __declspec(dllexport) // 导出函数#else#define _DLL_API __declspec(dllimport) // 导入函数#endif#ifdef __cplusplus// 定义一个 C++ 类 Dll_Classclass Dll_Class{public: Dll_Class(); // 构造函数 ~Dll_Class(); // 析构函数 // 虚拟函数,执行加法操作 virtual int Addition(int a, int b);};#endif// 使用 C 链接方式,防止名称重整extern "C"{ // 创建 Dll_Class 的实例并返回指针 _DLL_API Dll_Class *CreateObject(); // 释放 Dll_Class 对象的内存 _DLL_API void ReleaseObject(Dll_Class *pObject); // 返回两个整数的乘积 _DLL_API int Multiplication_TypeC(int a, int b); // 返回两个整数的和 _DLL_API int Addition_TypeC(int a, int b);}

源文件如下:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657// MathLibrary.cpp : 定义 DLL 的导出函数#include "pch.h" // 在 Visual Studio 2017 及更早版本中使用 stdafx.h#include #include #include "my_dll.h"// DLL 内部状态变量static unsigned long long previous_; // 存储前一个值static unsigned long long current_; // 存储当前序列值static unsigned index_; // 存储当前序列位置// 初始化 Fibonacci 关系序列,使得 F(0) = a, F(1) = b。// 此函数必须在调用其他任何函数之前被调用。void fibonacci_init( const unsigned long long a, const unsigned long long b){ index_ = 0; // 初始化序列位置为 0 current_ = a; // 将当前值设置为 a (F(0)) previous_ = b; // 将前一个值设置为 b (F(1))}// 生成序列中的下一个值。// 成功时返回 true,溢出时返回 false。bool fibonacci_next(){ // 检查是否会导致溢出 if ((ULLONG_MAX - previous_ < current_) || // 检查 current_ + previous_ 是否溢出 (UINT_MAX == index_)) // 检查索引是否已经达到上限 { return false; // 溢出,返回 false } // 特殊情况,当索引为 0 时,直接返回 b 的值 if (index_ > 0) { // 否则,计算下一个序列值 previous_ += current_; // 计算下一个 Fibonacci 值 } // 交换当前值和前一个值,为下一次计算做准备 std::swap(current_, previous_); ++index_; // 更新索引位置 return true; // 成功,返回 true}// 获取序列中的当前值unsigned long long fibonacci_current(){ return current_; // 返回当前 Fibonacci 值}// 获取当前索引位置在序列中的位置unsigned fibonacci_index(){ return index_; // 返回当前索引值}

之后接着选择 生成->生成解决方案

生成之后,你可以在x64这个文件夹下找到生成的dll和lib文件

隐式调用Dll重新创建一个c++的空项目或者控制台应用

然后生成一个源文件,代码如下:

12345678910111213141516171819202122232425262728// MathClient.cpp : Client app for MathLibrary DLL.// #include "pch.h" Uncomment for Visual Studio 2017 and earlier#include #include "../task_dll/my_dll.h"// 选择链接的DLL库#pragma comment(lib, "../Debug/task_dll.lib") //刚才写的dll文件路径int main(){ // 初始化 Fibonacci 关系序列 fibonacci_init(1, 1); // 输出序列值直到溢出 do { std::cout << fibonacci_index() << ": " << fibonacci_current() << std::endl; } while (fibonacci_next()); // 报告在溢出之前写入的值的计数 std::cout << (fibonacci_index() + 1) << " Fibonacci sequence values fit in an " << "unsigned 64-bit integer." << std::endl; return 0; // 返回值,表明程序正常结束}

然后生成,不出意外会显示这个

​​

只需要去刚才生成的dll文件下,把 .dll和.lib文件拷贝到当前文件下就可以了

​​

再次运行

​​

相关推荐

骂字的成语有哪些
365bet大陆华人的网站

骂字的成语有哪些

📅 06-29 👁️ 5496
梦幻西游手游69级大唐伤害提升攻略:武器装备宝石选择全解析
北极虾5种最简单的吃法:厨房小白也能轻松做,原汁原味最美味
小清新歌曲,小清新歌曲中文,轻快的歌曲女生小清新
365bet大陆华人的网站

小清新歌曲,小清新歌曲中文,轻快的歌曲女生小清新

📅 08-04 👁️ 1745
保姆级教学,路由器WIFI密码怎么设置?既可以提高网速而且还安全
龁噬的解释及意思
office365链接怎么打开

龁噬的解释及意思

📅 08-01 👁️ 1977
面积小该如何装修房子?这4个扩容显大技巧,轻松装出翻倍空间
中国移动共享流量全解析:家庭套餐、使用规则与省钱秘籍!
根据2025年最新政策动态与相关新闻,中国游戏版号审核效率提升已有多项实质性改革