获取dll路径方法

在指纹仪驱动二次开发中,用到的获取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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值