【发布时间】:2011-04-16 06:58:21
【问题描述】:
我正在尝试使用 GetModuleFileNameA 获取在另一个进程中加载的模块的名称。
我已经使用 dbgHelp 加载了一个符号并获得了它的模块基地址,但是发生了 2 件奇怪的事情:
1. 有时GetModuleFileNameA 会返回系统错误代码 5:访问被拒绝。
2.它返回错误的模块名称。对于我知道在模块 A 中的函数,我得到模块 B 的名称...:/
有人可以帮我吗?
谢谢:)
【问题讨论】:
-
为什么你还在使用那个函数的 ANSI 版本?
-
哈哈,函数名末尾的
A表示是ANSI版本的函数。 Windows 操作系统在很长一段时间内开始在内部使用 Unicode。 Unicode 版本的函数在其名称后有一个W,而不是A。但是,如果您包含 Windows 标头 (windows.h),您所要做的就是使用函数的名称 (GetModuleFileName),并且标头负责将其定义为正确的变体。您应该在未定义_UNICODE的情况下进行编译的唯一原因是您是否仍然针对真正旧版本的 Windows。 -
一点也不。我们说的是 Windows 95 或 98。Windows XP 完全是 Unicode,所有版本的 Windows NT 都是。就像我说的,最简单的事情就是忘记前缀,让头文件自动为您定义正确的版本。今天编写的几乎所有代码都是Unicode。
标签: c++ windows getmodulefilename