dll的代码,dll是通过VC6向导中的MFC AppWizard(dll)建立的。DLL中建立一个对话框,然后建立一函数do_dlg_dll()来创建对话框。
extern "C" _declspec(dllexport) void do_dlg_dll()
{
CXiaoBaiDlg dlg;
dlg.DoModal();
}
exe中的代码,调用这个DLL来弹出对话框
void CCTDlg::OnBtnDll() 
{
typedef void(*pMyDll)(void); 
HINSTANCE hDLL = LoadLibrary("E:\\code\\CT\\Debug\\CTDll.dll");
pMyDll dll = (pMyDll)GetProcAddress(hDLL,"do_dlg_dll");
dll();
FreeLibrary(hDLL);
}现在这个exe调用dll的时候,HINSTANCE hDLL = LoadLibrary("E:\\code\\CT\\Debug\\CTDll.dll");这一句加载dll无效。
请问高手,为什么?

解决方案 »

  1.   

    路径正确吗?用 GetLastError 查查看是什么错误。
      

  2.   

    126的意思是找不到指定的模块。那么就是找不到dll了,或者是找不到你要加载的dll的依赖dll或模块。
      

  3.   

    HINSTANCE hDLL = LoadLibrary("E:\\code\\CT\\Debug\\CTDll.dll"); 
    这里要判断 NULL == hDLL
    如果NULL=hDLL 就是LoadLibrary失败了,通过GetLastError()捕获错误码错误码126找不到指定模块DLL啊,
    可能情况1、CTDll.dll的路径不对
            2、CTDll.dll可能还调用其他的DLL,你没有其他的这些DLL。可以通过VC的工具Dependency 来查看CTDll.dll依赖的DLL

    pMyDll dll = (pMyDll)GetProcAddress(hDLL,"do_dlg_dll");同样这里也要判断 NULL==dll如果NULL=dll 就是GetProcAddress失败了,通过GetLastError()捕获错误码