我做了一个dll,用隐式链接的方法调用dll没有问题,可是用动态加载编译也无错误,可是一运行就出现非法操作或者致命错误,请各位大虾帮我看下!!!以下是在一个按钮点击响应函数中的代码void CYYDllTestDlg::OnButton1() 
{
// TODO: Add your control notification handler code here //ShowDlg();  //隐式链接DLL,没有问题!!!

         //以下是动态加载dll的代码
typedef void (*AddrDlgShow)();
HINSTANCE hInst;
hInst=LoadLibrary("YYDll.dll");
AddrDlgShow dlgShow;
if(hInst!=NULL)
{
dlgShow=(AddrDlgShow)GetProcAddress(hInst,"ShowDlg");
(*dlgShow)();
}
else
{
AfxMessageBox("加载DLL失败!");
}
FreeLibrary(hInst);
}

解决方案 »

  1.   

    (*dlgShow)();有这样用的吗?直接dlgShow();
      

  2.   


    我这样也试过的,结果一样的,这个(*dlgShow)()是我从论坛上看来的,总之改成dlgShow也不行饿!!!
    我照1楼说的跟踪了下,出现了 Unhandled exception in YYDllTest.exe:0xC0000005: Access Violation!!!!!
      

  3.   

    我自己觉得错误应该是出在 typedef void (*AddrDlgShow)(); 和 (*dlgShow)()上,可是不知道怎么改
      

  4.   

    if(hInst!=NULL)
    {
    dlgShow=(AddrDlgShow)GetProcAddress(hInst,"ShowDlg");
    (*dlgShow)();
    }=======================
    改成这样试一下if(hInst!=NULL)
    {
    dlgShow=(AddrDlgShow)GetProcAddress(hInst,"ShowDlg");
    dlgShow();             //注意,改的是这行。
    }
      

  5.   

    dlgShow=(AddrDlgShow)GetProcAddress(hInst,"ShowDlg");
    LZ这里为什么不加一个判断
    if(dlgshow !=NULL)
    {
       dlgShow();
    }