嘿
我正在尝试获取与我的exe文件位于同一文件夹中的dll的路径。要走的路似乎是使用QueryFullProcessImageName()
或GetModuleFileName()
中的一个来获取正在运行的可执行文件的路径,然后使用字符串操作使其成为所需库的路径。
不幸的是,这两个函数都没有提供一种方法来提前找出所需的大小缓冲区。我已经尝试将零传入nSize参数,但这没有达到预期的效果。
这样做的最佳做法是什么?
答案 0 :(得分:3)
在实践中,您可以使用Windows API MAX_PATH
作为缓冲区大小,为了额外的安全,可以添加1。
理论上 Windows路径可以更大。我记得MAX_PATH
就像是270左右,而在NTFS文件系统中,路径可以达到(大约)32767个字符。但是,对于那么大的大小,它必须以Unicode的形式处理,而且重要的是,Windows资源管理器不支持这么大的路径,所以它在实践中不是问题。
在实践中,再次,如果你应该遇到这么大的路径,显然不可能删除,那么你可以使用Unicode命名(有一个特殊的前缀用于长路径),和/或等效的短名称(DOS 8.3名称) )和/或定义逻辑驱动器以缩短路径,以便可以删除目录/文件。
干杯&第h。,
答案 1 :(得分:0)
GetModuleFilename
返回复制到缓冲区的字符数。如果它小于缓冲区的大小,你就没事了。如果它等于缓冲区的大小,请分配一个更大的缓冲区并重试。