在VC中如何获得程序的当前路径?

实例:

#include < windows.h >
#include < string.h > 

HINSTANCE hInst;
char szBuf[256];
char *p; 

//拿到全部路径
GetModuleFileName(hInst,szBuf,sizeof(szBuf)); 

//分离路径和文件名。
p = szBuf;
while(strchr(p,'\\')) {
p = strchr(p,'\\');
p++;
}
*p = '\0';
//路径在szBuf

===========================================================

获取当前目录的函数:

DWORD GetCurrentDirectory(

  DWORD nBufferLength,   // size, in characters, of directory buffer
  LPTSTR lpBuffer        // pointer to buffer for current directory

); 得意 这个最快!

或者用

DWORD GetModuleFileName(

  HMODULE hModule, // 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。(可用于返回指定的DLL模块地址)
  LPTSTR lpFilename, //指定一个字串缓冲区,用于容纳文件的以NULL字符结尾的路径名,是一个输出参数
  DWORD nSize //装载到缓冲区lpFileName的最大值
  ); //如果函数失败,返回值将为0,利用GetLastError可获得异常代码。

VC实例

  #include <windows.h>

  #include <stdio.h>
  BOOL CreateSampleService()
  {
  TCHAR szPath[MAX_PATH];
  if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )
  {
  printf("GetModuleFileName failed (%d)\n", GetLastError());
  return FALSE;
  }
  return TRUE;
  }
  /*
  如果想获得某个正在运行的EXE或者DLL的全路径可以这样写代码
  GetModuleFileNameEx(hProcess,hInst,lpFile,MAX_PATH);//注意下 缓冲区 就行了。
  */

==========================================================

DWORD GetModuleFileNameEx(HANDLE hProcess,HMODULE hModule,LPTSTR lpFilename,DWORD nSize)
      hProcess是目标进程的句柄、hModule是目标模块的句柄(当此参数为NULL时函数返回的是进程可执行文件的路径)、lpFilename是存放路径的字符串缓冲区、nSize表示缓冲区的大小。
hModule是目标模块的句柄 模块句柄什么呀  如果不为null会返回什么呀 ?

一个进程可能有多个模块在内存中运行,像exe,dll什么的。其中有一个是主模块,当hModule参数为NULL是返回的主模块的路径,不为NULL,返回指定模块文件的路径。
==========================================================


别忘啦,控制台下的话参数 argv[0],哈哈cout<<argv[0];

而 GetModuleFileName 是win32的API
比如你建立一个控制台程序 可以这样使用:char BufferFileName[MAX_PATH];//MAX_PATH是系统的宏定义memset(BufferFileName,0,MAX_PATH);if( GetModuleFileName(NULL,BufferFileName,MAX_PATH) ){ 输出BufferFileName即可。}第一个参数如果为NULL 则表示获取当前应用程序的路径第二个参数就是保存获取路径的字符串空间第三个参数就是数组的大小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值