我的DLL 有个函数VOID SHOWDLG()
{
  createdlg();
}这个createdlg();有个参数就是HWND 是父窗口的HWND 但我如何把应用程序的HWND传递给它 那个m_pMainWnd 是一个类 不能做参数同时我还有一个问题 就是这个DLG创建了 我想让它一模态对话框显示 该怎么写谢谢

解决方案 »

  1.   

    那首先你需要让你DLL的函数有一个HWND的参数,像这样:
    void SHOWDLG(HWND hDlg)
    {
      createdlg(hDlg);
    }
    m_pMainWnd->GetSafeHwnd()就可以获得这个CWnd窗口指针所对应的句柄。
      

  2.   

    我刚才实验了 但出了问题
    hwnd hdlg
    DLL就是void SHOWDLG(HWND hDlg)
    {
      hdlg = createdlg(,,hDlg,);
      showWindow(hinst,sw_SHOW)
    }
    EXE 是 typedef void (_stdcall *dllshow)(HWND hMain)
    ...
    HINSTANCE hinst;
    hisnt = loadlibrary("dll");
    dllshow dlldlg;
    dlldlg = (dllshow)GetProaddress(hisnt,"SHOWDLG");
    dllDlg(AfxGetApp->m_pMainWnd->GetSafeHwnd())对话框出来了但出现了一个错误 请问是怎么呢
      

  3.   

    ERROR:
    THE value of esp was not property saved across the function CALL .....
      

  4.   

    将SHOWDLG的调用约定声明出来
    void _stdcall SHOWDLG(HWND hDlg)
    {
      hdlg = createdlg(,,hDlg,);
      showWindow(hinst,sw_SHOW)
    }
    如果还是有问题的话,就是createdlg内部的问题了
      

  5.   

    vc中的默认调用约定是__cdecl,注意不要冲突
      

  6.   

    extern "C" __declspec(dllexport) void _stdcall ShowDlg(HWND hMain);extern "C" __declspec(dllexport) void _stdcall ShowDlg(HWND hMain){ 
        hwndDLG = CreateDialog(hinst,MAKEINTRESOURCE(IDD_DIALOG1), hMain,(DLGPROC)DlgProc);     ShowWindow(hwndDLG, SW_SHOW); } 
    exe中的调用函数typedef void (_stdcall * DllShow)(HWND  hMain);
    void CUseDlg::OnOK() 
    {
       DllShow Dlg;
    HINSTANCE hinstDll;
    HINSTANCE hi;
    hinstDll = LoadLibrary("E:\\新建文件夹\\vc\\dll2\\Debug\\dll2.dll");
    Dlg = 
          (DllShow) GetProcAddress(hinstDll, 
            "ShowDlg");
    Dlg(AfxGetApp()->m_pMainWnd->GetSafeHwnd());}
    但还是有问题 即使我把DLL的函数里面的内容都删除 都还是有问题
      

  7.   

    我解决了 我的方法是extern "C" __declspec(dllexport) void _stdcall ShowDlg(HWND hMain);  void _stdcall ShowDlg(HWND hMain){ 
        hwndDLG = CreateDialog(hinst,MAKEINTRESOURCE(IDD_DIALOG1), hMain,(DLGPROC)DlgProc);     ShowWindow(hwndDLG, SW_SHOW); } 
    加入一个DEF 用EXPORTS导出 但为什么我还不知道
      

  8.   

    加def文件导出,和直接dllexport应该是一样的啊