C++ dll如何获取所在路径

当dll被其他语言调用的时候,如何在dll中获取所在路径呢?这个需求看似很平常,但一番尝试还是几经波折。

一、使用绝对路径,这在自己的电脑是可行的,如果路径设置合理,在大多数电脑上应该也是运行正常的,但这不是我们想要的,我就想获得dll当前所处路径。

二、使用相对路径,这看起来是不错的方案,但编译运行死活不正常,相对路径不对,查资料解释说相对路径的当前目录不一定等于应用程序执行文件的所在目录,应用程序启动,当前目录可以被任意设置。

三、外部语言传路径给dll,这应是可以的,但这里也有个问题,我要路径的地方是个静态库,它被主的dll使用,白话解释就是我要向我同事的闺蜜告白,就算同事愿意牵线还是挺费劲的。

四、尝试在dll调用内部获得路径,使用GetModuleFileName这个API,它需要3个参数,第一个参数是HMODULE类型模块句柄,使用NULL获得启动应用程序全路径,第2个参数是一个指向字符串缓冲区的指针,第3个参数是这个缓冲区的最大字符数量。

第四种方案补充,进一步使用VirtualQuery,如果找到,则使用MEMORY_BASIC_INFORMATION内存结构体的模块句柄信息;没找到则用NULL。

重要代码

HMODULE GetSelfModuleHandle()
{
	//Windows内存与结构管理结构体
	MEMORY_BASIC_INFORMATION mbi;
	//查询内存的状态
	return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL);
}

原文链接: https://www.cnblogs.com/BlogMySea/p/11167551.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ dll如何获取所在路径

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/298625

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午7:56
下一篇 2023年2月15日 下午7:57

相关推荐