如题,代码如下,求指点 谢谢
ypedef void (WINAPI * TESTDLL)();        HINSTANCE hDll = NULL;
        hDll = ::LoadLibrary(_T("Wnd.dll"));        if (NULL == hDll)
        {
            MessageBox(_T("Wrong"));
        }        TESTDLL lpproc;
        lpproc = (TESTDLL) GetProcAddress(hDll, "ShowTest");        if ((TESTDLL)NULL != lpproc)
        {
            (*lpproc)();
            FreeLibrary(hDll);
        }
extern "C" __declspec(dllexport) void ShowTest()
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CTest test;
    /*test.Create(IDD_DIALOGBAR);*/
    test.DoModal();
    test.MoveWindow(200, 200, 500, 500);
}

解决方案 »

  1.   

    可用AfxGetResourceHandle和AfxSetResourceHandle。
    AFX_MANAGE_STATE改变的内容比较多,如果仅仅是切换资源还是用上面两个好。
      

  2.   

    这两句换一下次序,改为test.MoveWindow(200, 200, 500, 500); 
    test.DoModal();调试的时候,会停在DoModal上面吗?
      

  3.   

    初看都有好几个问题。
    1、调用者也是MFC吗?如果是,应该用AfxLoadLibrary而不是::LoadLibrary。如果不是,问题就大了,你见过非MFC的EXE/DLL能成功调用MFC DLL的吗?2、DoModal调用时不会退出,指导对话框窗口被关闭,既然窗口已经关闭了,MoveWindow还有意义吗?楼上的说改变次序也不行,MoveWindow先调用时对话框根本没有创建。3、跟踪过 if ((TESTDLL)NULL != lpproc) 这句吗?是不是能获取到导出函数的地址?导出函数用到了extern "C"来修饰,但是调用者直接用了 typedef void (WINAPI*)(); 这两个申明你确定一致?C命名和C++命名是不同的。
      

  4.   

    extern "C" __declspec(dllexport) void ShowTest(CWnd* p)
    {
        //AFX_MANAGE_STATE(AfxGetStaticModuleState());
        CTest test(p);
        /*test.Create(IDD_DIALOGBAR);*/
        test.DoModal();
        //test.MoveWindow(200, 200, 500, 500);
    }