获取模块文件路径名

 

// 获取模块文件路径名
static bool GetModulePathName(CStdString& strModulePathName)
{
 CStdString szUdlFileName;
 TCHAR szModuleName[_MAX_PATH];
 TCHAR szDrive[_MAX_PATH];
 TCHAR szDir[_MAX_PATH];
 TCHAR szFilename[_MAX_PATH];
 TCHAR szExt[_MAX_PATH];
 TCHAR szNewFile[_MAX_PATH];
 TCHAR szFileData[_MAX_PATH];
 TCHAR szCutFile[_MAX_PATH];

 if (::GetModuleFileName(NULL, szModuleName, _MAX_PATH) == FALSE)
 {// 在这里要注意了,GetModuleFileName第一个参数为NULL表示获取的名字是当前的可执行文件的路径,如果你写的段代码在一个dll中,那么你要获取dll的路径,就必须把dll的

// hModle传进来,可以见本文最后面的例子,告诉你怎么获取dll的hModule
  return false;
 }

 ::ZeroMemory(szDrive, sizeof(szDrive));
 ::ZeroMemory(szDir, sizeof(szDir));
 ::ZeroMemory(szFilename, sizeof(szFilename));
 ::ZeroMemory(szExt, sizeof(szExt));
 ::ZeroMemory(szNewFile, sizeof(szNewFile));
 ::ZeroMemory(szFileData, sizeof(szFileData));

 // split the path
 ::_tsplitpath(szModuleName, szDrive, szDir, szFilename, szExt);

 strModulePathName.Format("%s%s", szDrive, szDir);

 return true;
}

 

/

BOOL APIENTRY DllMain(_In_ void * _HDllHandle, _In_ unsigned _Reason, _In_opt_ void * _Reserved)
{
 switch(_Reason)
 {
 case DLL_PROCESS_ATTACH:
  g_hModule = (HMODULE)_HDllHandle ;// 强制转换
 case DLL_THREAD_ATTACH:
 case DLL_THREAD_DETACH:
 case DLL_PROCESS_DETACH:
  break;
 }
 return TRUE ;
}


当然,对于HMODULE,DllMain它也传递过来的. 
但MFC的DLL的话,因为自己并不写DllMain,所以得考虑GetModuleHandle/GetModuleHandleEx 
在MFC的DLL中也可以用AfxGetInstanceHandle  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值