1.GetModuleFileName,获取模块当前路径
CHAR path_buffer[_MAX_PATH];
CHAR drive[_MAX_DRIVE];
CHAR dir[_MAX_DIR];
CHAR fname[_MAX_FNAME];
CHAR ext[_MAX_EXT];
GetModuleFileName(NULL, path_buffer, _MAX_PATH);
_splitpath_s(path_buffer, drive, dir, fname, ext);
strDllPath = "";
strDllPath += drive;
strDllPath += dir;
strDllPath += "NrcappcSDK.dll";
在dll中获得主目录
需要用到main函数中的参数hModule
定义全局变量来取值
HMODULE g_hModule;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
g_hModule = hModule;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
定义全局变量
extern HMODULE g_hModule;
CHAR path_buffer[_MAX_PATH];
CHAR drive[_MAX_DRIVE];
CHAR dir[_MAX_DIR];
CHAR fname[_MAX_FNAME];
CHAR ext[_MAX_EXT];
GetModuleFileName(g_hModule, path_buffer, _MAX_PATH);
_splitpath_s(path_buffer, drive, dir, fname, ext);
strDllPath = "";
strDllPath += drive;
strDllPath += dir;
strDllPath += "NrcappcSDK.dll";
2。GetCurrentDirectory,获取进程当前路径
区别:
没有指明路径的时候,程序中用到的路径就是相对于当前路径(GetCurrentDirectory获取)的,这个当前路径是可以随时改变的(比如打开文件对话框、SetCurrentDirectory等,打开的路径是默认的,或你上传访问过的);
GetModuleFileName是指获取程序中加载的模块文件的路径,一般的用法是传递参数NULL表示当前模块,或者说就是可执行文件的文件路径名,对于一个固定的程序这个路径也是固定的。
CHAR szCurrentDirectory[MAX_PATH];
GetCurrentDirectory(MAX_PATH, szCurrentDirectory)
3。获取指定的系统路径 SHGetSpecialFolderPath
根据头文件中不同的CSIDL值,获得不同的目录路径
#include <shlobj.h>
#pragma comment(lib, "shell32.lib")
TCHAR szPath[MAX_PATH];
SHGetSpecialFolderPathNULL,szPath,CSIDL_COMMON_DOCUMENTS, FALSE);
4。SHGetFolderPath
SHGetFolderPath 亦可获取系统CSIDL路径
TCHAR szPath[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE, NULL, 0, szPath)