GetModuleFileNameA函数 —— Microsoft文档翻译和使用示例

GetModuleFileNameA function原文档链接:https://docs.microsoft.com/zh-cn/windows/desktop/api/libloaderapi/nf-libloaderapi-getmodulefilenamea

 

获取包含一个特定模块的文件的全路径,这个模块必须是由当前运行的进程的生成。

C++函数原型

DWORD GetModuleFileNameA(

    HMDULE hModule,

    LPSTR lpFilename,

    DWORD nSize

);

函数参数

  • hModule 

    所需路径的模块的句柄。如果该参数为NULL,函数会获取当前进程的运行文件(.exe文件)的全路径。

  • lpFilename 

    一个指向接收存储模块的全路径的缓冲区的指针。如果路径的长度小于nSize参数定义的长度,返回路径为一个结尾为空终止('\0')的字符串;如果路径的长度超过nSize参数所定义的长度,字符串会截断到nSize个字符的长度,并在最后及nSize-1的位置包含一个终止符('\0')。

  • nSize

    lpFilename缓冲区的长度。

返回值

   如果函数运行成功,返回值为字符串的长度。如果字符串的长度大于nSize字节,返回

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
附件是VS2010的工程,C++日志类,谷歌的东西,很好用,也很强大哦! glog简介 Google glog是一个基于程序级记录日志信息的c++库,编程使用方式与c++的stream操作类似,例: LOG(INFO) << "Found " << num_cookies << " cookies"; “LOG”宏为日志输出关键字,“INFO”为严重性程度。 主要支持功能: 1, 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为; 2, 严重性分级,根据日志严重性分级记录日志; 3, 可有条件地记录日志信息; 4, 条件中止程序。丰富的条件判定宏,可预设程序终止条件; 5, 异常信号处理。程序异常情况,可自定义异常处理过程; 6, 支持debug功能。可只用于debug模式; 7, 自定义日志信息; 8, 线程安全日志记录方式; 9, 系统级日志记录; 10, google perror风格日志信息; 11, 精简日志字符串信息。 开源代码托管 开源代码地址:https://github.com/google/glog 其实官方开源代码已经有大量demo可以参考了,也提供了VS可以直接打开编译的项目。 如何使用 1:把glog文件夹拷贝到源代码目录 2:在工程设置中添加附加包含目录(glog\include;)和附加库目录(glog\lib;),在附件依赖项中添加对应lib文件,一一对应关系如下: MDd libglog32MDd.lib MD libglog32MD.lib MTd libglog32MTd.lib MT libglog32MT.lib 建议使用MDd和MD方式,带上对应的dll(在glog\bin目录,需要时拷贝到bin文件输出目录)可以避免使用MTd,MT引起的内存泄露是值得的。 #include #include using namespace std; //包含glog头文件,建议放在stdafx.h中 //#define GOOGLE_GLOG_DLL_DECL // 使用静态库的时候用这个,不过我测试静态库有内存泄露,所以不推荐使用静态库 #define GLOG_NO_ABBREVIATED_SEVERITIES #include "glog/logging.h" //获取当前程序的运行目录 string GetAppPathA() { char szExePath[MAX_PATH] = {0}; GetModuleFileNameA(NULL,szExePath,MAX_PATH); char *pstr = strrchr(szExePath,'\\'); memset(pstr+1,0,1); string strAppPath(szExePath); return strAppPath; } void main() { //glog初始化 google::InitGoogleLogging("重签程序"); string strLogPath = GetAppPathA().append("LogInfo\\"); CreateDirectoryA(strLogPath.c_str(),NULL); google::SetLogDestination(google::GLOG_INFO,strLogPath.c_str()); //功能测试 LOG(INFO)<<"log start...";//普通日志 LOG(WARNING)<<"Warning log";//警告日志 LOG(ERROR)<<"Error log";//错误日志 int i = 4; LOG_IF(INFO,i == 4)<<"Log if Test"; //以上就是我常用的几个日志函数了,当然还有很多更加强大的日志相关函数,大家如有有兴趣,可以参照官方给的示例使用, //开源代码地址:https://github.com/google/glog MessageBoxA(NULL,"Test Over",":)",MB_ICONINFORMATION); } 测试程序中,我使用的动态链接库方式。(Debug模式中代码生成为MDd,Release为MD)。lib是截止现在2015-11-04-21:35是最新的。采用VS2010编译,MTd,MT,MDd,MD方式编译在测试项目中都有提供。 博文地址: http://blog.csdn.net/sunflover454/article/details/49643625
GNU libiconv-1.15和libintl-0.19.8.1,VS2017工程和 Makefile.mak 命令行编译文件 CSDN-tags: libiconv1.15 libintl-0.19.8.1 VS2017 SDK17134.12 声明: 最新版,修正了relocatable.c文件中GetModuleFileName函数的问题。在ANSI下,等同于:GetModuleFileNameA;Unicode下等同于:GetModuleFileNameW,如果你的程序出错,请检查。 代码为本人良心制作,虽然花费了一定的时间和精力,但不保证完全没有错误。如果您下载并使用了本代码,将其包含在您发布的应用中,给您带来了经济上,心理上,生活上的损失,本人不负有责任。 所有代码都基于官网进行修改,iconv的代码来源于libiconv-1.15的lib目录,intl的代码来源于gettext-runtime的intl目录。 intl需要iconv的支持,如果想单独编译不需要iconv的intl, 请自行修改intl目录下的config.h文件, /* Define if you have the iconv() function and it works. */ #define HAVE_ICONV 1 /* Define to 1 if you have the header file. */ #define HAVE_ICONV_H 1 为: /* Define if you have the iconv() function and it works. */ /* #undef HAVE_ICONV */ /* Define to 1 if you have the header file. */ /* #undef HAVE_ICONV_H */ 并修改VS工程中预处理器定义,删掉/DDEPENDS_ON_LIBICONV=1 VS的工程为VS2017的工程文件,使用VC141工具集,SDK10.0.17134.12,如果没有2017,也可以用Makefile.mak文件来编译。 或者你自己降低版本,我最初使用的最低版本是VC140_xp,SDK7.1A,也就是VS2015默认安装的兼容xp工具集,VS2015以下版本未测试。 nmake /f Makefile.mak [DLL] [DEBUG] 指定 DLL=1 编译dll版本,默认是lib版本,libiconv.lib , libintl.lib。 指定 DEBUG=1 编译debug版本,默认是release版本。 同理,如果intl不需要iconv,请修改上面的配置文件选项,并, 删掉Makefile.mak中/DDEPENDS_ON_LIBICONV=1 配置文件的制作,参考了以下几处,修改的大概原则是,能定义的全定义了,就这样: https://github.com/kahrl/gettext-msvc 这个地址提供了libiconv和libintl的VS工程和配置文件。 https://github.com/winlibs 为编译PHP而修改的libiconv和libintl源码。 附带的Cygwin目录中的工具 libiconv官方的制作文档,用cygwin配合VC,生成的配置文件。 一大堆的宏和函数搞得我头晕脑涨。所以配置文件如果有错误,也在所难免,所有修改的文件,如config.h,iconv.h,libintl.h都附带了原始文件。 如: 配置文件 原始文件 DLL原始文件 LIB原始文件 config.h config.h.in iconv.h iconv.h.build.in iconv.h.in localcharset.h localcharset.h.build.in localcharset.h.in libintl.h libgnuintl.in.h 欢迎同学们下载测试。有问题可以给我发邮件[email protected]
### 回答1: getmodulefilenamea是一个Windows API函数,用于获取指定模块的文件名。该函数的参数是一个模块句柄和一个缓冲区,函数将模块的文件名复制到缓冲区中,并返回复制的字符数。如果函数执行成功,则返回值为复制到缓冲区中的字符数,否则返回。 ### 回答2: GetModuleFileNameA是一个用于获取指定模块的文件名的函数。该函数是Windows操作系统提供的API之一,用于获取加载的动态链接库(DLL)或可执行文件的完整路径名。 该函数的详细格式为: BOOL GetModuleFileNameA( HMODULE hModule, LPSTR lpFilename, DWORD nSize ); 参数hModule指定要检索文件名的模块的句柄。如果为NULL,该函数将返回调用者线程的可执行文件的路径名。 参数lpFilename指向一个字符缓冲区,用于接收文件名。 参数nSize指定lpFilename缓冲区的大小,以字符数(包括空终止符)表示。 该函数的返回值为BOOL类型,成功时返回非零值,失败时返回零。如果函数成功,lpFilename将包含模块的完整路径名。 GetModuleFileNameA函数的作用十分重要,它可以帮助开发人员确定正在运行的模块所在的路径,以便在程序运行过程中读取或操作该模块。特别是在DLL开发过程中,可以利用该函数获取DLL文件的路径,以实现一些与该DLL相关的操作。 需要注意的是,GetModuleFileNameA函数使用时需要进行错误处理,特别是需要检查返回值是否为零。如果函数调用失败,可能是由于参数不正确、缓冲区大小不足或其他原因导致。在出现错误时,可以使用GetLastError函数获取详细的错误信息。因此,在使用函数时,应该对错误情况进行适当处理,以确保程序的健壮性和稳定性。 ### 回答3: getmodulefilenamea是一个Windows API函数,用于获取指定模块的文件名。它有以下几个参数: 1. hModule:表示一个已经加载的模块的句柄,如果为NULL,则返回调用进程的可执行文件的路径。 2. lpFilename:表示一个指向保存模块文件名的缓冲区的指针。 3. nSize:表示缓冲区的大小,以字节为单位。 当调用此函数时,它会将指定模块的完整路径名(包括文件名)复制到lpFilename指定的缓冲区中,并返回复制的字符数。如果函数调用成功,返回的字符数不包括空字符,如果函数调用失败,返回0。 使用getmodulefilenamea函数可以获取某个已经加载的模块的文件名,这在一些需要获取模块详细信息的场景中非常有用。例如,当我们需要获取一个DLL文件的路径时,可以使用函数来获取。此外,也可以使用函数来获取当前进程的可执行文件的路径。 需要注意的是,getmodulefilenamea函数是Windows API函数使用时需要包含Windows.h头文件,并且在链接时需要连接Kernel32.lib库。另外,该函数通常使用ANSI字符集版本(getmodulefilenamea)或Unicode字符集版本(getmodulefilenamew)来进行调用,具体使用哪个版本取决于编程的需求。 总之,getmodulefilenamea是一个用于获取指定模块文件名的Windows API函数,通过指定模块的句柄,可以获取模块的完整路径名。使用函数可以方便地获取模块的详细信息,对于一些需要获取模块路径的编程任务非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值