使用c ++显式加载加载dll

时间:2012-02-16 18:03:24

标签: c++ winapi dll explicit

我正在明确地调用一个dll,一切正常......问题是当我从函数中返回一个值,我正在加载de dll(释放它)程序停止(看起来像)..似乎有些东西不让程序继续......

我的代码:

xfsManager::StartUp(...)
{
    WORD result=0;

    HINSTANCE hGetProcIDDLL = LoadLibrary("c:\\emvlib\\I_krnfct.dll"); 
    FARPROC lpfnGetProcessID = GetProcAddress(HMODULE (hGetProcIDDLL),EMV_KERNEL_INITIALIZATION); 

    typedef DWORD (__stdcall * pICFUNC)(LPSTR); 

    pICFUNC dllFunction;

    dllFunction = pICFUNC(lpfnGetProcessID); 

    DWORD sTmpRc = 0;
    sTmpRc = dllFunction("something");  
    if(sTmpRc != EMV_OK)
    {
        //NOT OK
    } 
    else
    {
        //OK
    }
    FreeLibrary(hGetProcIDDLL);

    return XFS_OK;   // EXITING
    /*-----------------------------*/
}

非常感谢你的帮助。

Cristovao Santos

2 个答案:

答案 0 :(得分:1)

您没有检查LoadLibrary()GetProcAddress()的返回值 - 这些是否有效?

可能您的DLL名称/路径或导出的函数名称错误。请记住,stdcall函数通常具有与参数列表大小相对应的“@nn”后缀。但事情并非总是如此。

答案 1 :(得分:0)

您可能需要在调用LoadLibrary时使用宽字符:

HINSTANCE hGetProcIDDLL = LoadLibrary(L"c:\\emvlib\\I_krnfct.dll"); /* notice the L */