在指纹仪驱动二次开发中,用到的获取dll路径方法以及添加字符串生成新路径。同时要注意unicode。
在C#中就一句话:
string EntryPath = Application.StartupPath.ToArray()[0].ToString() + @":\AISI_DAT..\";
//获取DLL当前路径
CString GetMoudulePath()
{
CString strRetun = _T("");
#ifdef _UNICODE
TCHAR szBuff[MAX_PATH];
//HMODULE module = GetModuleHandle("FPSDLL");
HMODULE module = AfxGetInstanceHandle();
GetModuleFileName(module, szBuff, sizeof(szBuff));
strRetun.Format(_T("%s"), szBuff);
#else
//HMODULE module = GetModuleHandle("FPSDLL");
HMODULE module =AfxGetInstanceHandle();
CHAR szBuff[MAX_PATH];
GetModuleFileName(module, szBuff, sizeof(szBuff));
strRetun.Format(_T("%s"),szBuff);
#endif
int pos = strRetun.ReverseFind(_T('\\'));
if (pos != -1)
{
strRetun = strRetun.Left(pos);
}
return strRetun;
}
char* getpath(char* relativepath)
{
//获取dll文件所在路径 (!!!!收藏!!)
CString dllpath = GetMoudulePath();
dllpath += relativepath; "";
//CString 是取决于你工程使用的是什么字节类型它就是什么类型的.
//如果你使用的是非宽字节, 则CString::GetBuffer() 是 const char * 类型的
//如果你使用的是宽字节, 则CString::GetBuffer() 是 const wchar_t* 类型的 这时你要用WideCharToMultiByte进行转换。
//将CString转换为char*(!!!!)
int nLength = dllpath.GetLength();
int nBytes = WideCharToMultiByte(CP_ACP, 0, dllpath, nLength, NULL, 0, NULL, NULL);
char* filepath = new char[nBytes + 1];
memset(filepath, 0, nLength + 1);
WideCharToMultiByte(CP_OEMCP, 0, dllpath, nLength, filepath, nBytes, NULL, NULL);
filepath[nBytes] = 0;
return filepath;
}