window: C++ 获取自己写的dll的地址

news/2025/2/12 3:51:43/

我自己用C++写了一个插件,插件是dll形式的,我的插件式在dll的目录下有个config文件夹,里面是我用json写的插件配置文件,当插件运行的时候我需要读取到json配置文件,所有最重要的就是如何获取dll的路径.

大概就是这么个结构,

我自己封装了一个函数.只适用于window编程,因为里面用到了windows系统的函数,

#include <map>
#include <string>
#include <vector>
#include <memory>
#include <fstream>
#include <Windows.h>
#include <iostream>
#include <functional>
#include <filesystem>#if _MSC_VER >= 1910
using FileSysPath = std::filesystem::path;
using FileSysDirIter = std::filesystem::directory_iterator;
#define FileSys std::filesystem
#elif _MSC_VER >= 1900
using FileSysPath = std::tr2::sys::path;
using FileSysDirIter = std::tr2::sys::directory_iterator;
#define FileSys std::tr2::sys
#endifstd::string GetPluginConfigFilePath()
{std::string strConfigPath = "";char szBuff[MAX_PATH] = { 0 };GetModuleFileName(GetSelfModuleHandle(), szBuff, MAX_PATH);for (auto const& dir_entry : FileSys::recursive_directory_iterator{ FileSysPath(szBuff).parent_path()}){auto tempFilePath = dir_entry.path();if (FileSys::is_regular_file(tempFilePath)){if (tempFilePath.extension().generic_string() == ".json"){strConfigPath = tempFilePath.string();break;}}}return strConfigPath;
}HMODULE GetSelfModuleHandle()
{MEMORY_BASIC_INFORMATION mbi;return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL);
}

至于通用的方式,以后用到了再研究研究纯C++怎么获取dll路径. 


http://www.ppmy.cn/news/1361050.html

相关文章

Postgresql源码(124)两个事务更新同一行数据时的行为和原理分析

XactLockTableWait函数、transactionid锁的一些原理和分析 结论 更新行时&#xff0c;会根据xmax拿transactionid锁&#xff0c;等对应的事务结束。 如果结束是回滚&#xff0c;则heap_update继续更新。如果结束时提交&#xff0c;则heap_update要返回上层ExecUpdate调用EvalP…

【PostgreSQL内核学习(二十七) —— (编码转换)】

编码转换 概述处理客户端与服务器之间的字符串编码转换pg_do_encoding_conversion 函数FindDefaultConversionProc 函数FindDefaultConversion 函数 处理服务器与客户端之间的字符串编码转换两者的联系和区别 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&am…

Unity编辑器扩展之是否勾选Text组件BestFit选项工具(此篇教程也可以操作其他组件的属性)

想要批量化是否勾选项目预制体资源中Text组件BestFit属性&#xff08;此篇教程也可以操作其他组件的属性&#xff0c;只不过需要修改其中对应的代码&#xff09;&#xff0c;可以采用以下步骤。 1、在项目的Editor文件中&#xff0c;新建一个名为TextBestFitBatchProcessor的…

整型数组按个位值排序/最低位排序(C语言)

题目描述 给定一个非空数组&#xff08;列表&#xff09;&#xff0c;其元素数据类型为整型&#xff0c;请按照数组元素十进制最低位从小到大进行排序&#xff0c;十进制最低位相同的元素&#xff0c;相对位置保持不变。 当数组元素为负值时&#xff0c;十进制最低位等同于去除…

创新性3D数据合成模型,微软推出EgoGen

随着AR、VR等设备的广泛应用,第一人称的应用开始增多。但在研发方面面临不同的挑战,例如&#xff0c;图像模糊、视觉混乱、遮挡更严重等&#xff0c;给视觉模型的训练带来重大挑战。 一方面,人工标注真实第一视角数据集&#xff0c;来培训深度学习模型的成本和难度都很高。另一…

Go slice的底层实现原理?

切片是基于数组实现的&#xff0c;它的底层是数组&#xff0c;可以理解为对 底层数组的抽象。 源码包中src/runtime/slice.go 定义了slice的数据结构&#xff1a; type slice struct {array unsafe.Pointerlen intcap int }slice占用24个字节 array: 指向底层数组的指针…

LabVIEW串口通信的激光器模块智能控制

LabVIEW串口通信的激光器模块智能控制 介绍了通过于LabVIEW的VISA串口通信技术在激光器模块控制中的应用。通过研究VISA串口通信的方法和流程&#xff0c;实现了对激光器模块的有效控制&#xff0c;解决了数据发送格式的匹配问题&#xff0c;为激光器模块的智能控制提供了一种…

使用Python制作进度条有多少种方法?看这一篇文章就够了!

前言 偶然间刷到一个视频&#xff0c;说到&#xff1a;当程序正在运算时&#xff0c;会有一个较长时间的空白期&#xff0c;谁也不知道程序运行的进度如何&#xff0c;不如给他加个进度条。 于是我今个就搜寻一下&#xff0c;Python版的进度条都可以怎么写&#xff01; 送书…