程序也没有报错,就是 StartPlay("D:\\2.WAV");  这句一执行就过去了,没有显示过对话框 why?

解决方案 »

  1.   

    这是因为在主程序的资源链中无法查找到这个对话框资源需要在创建对话框之前将当前资源的handle切换到对话框的资源
    我这里写了一个自动切换的简单类,你直接用就可以了{
        AFX_MANAGE_STATE(AfxGetStaticModuleState());  
        CResourceLock ResLock(g_hModule); // 增加这一句,其中g_hModule是动态库的hInstance,在DllMain中保存的全局变量    CwmaDlg dlg;    
        dlg.DoModal();
        return 0;
    }
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    // Remove this if you use lpReserved
    UNREFERENCED_PARAMETER(lpReserved); if (dwReason == DLL_PROCESS_ATTACH)
    {
    g_hModule = hInstance;
    }
    ......
    // h
    class CResourceLock
    {
    public:
    CResourceLock(HINSTANCE hInstance);
    virtual ~CResourceLock();private:
    HINSTANCE m_hInstance;
    };// cpp
    CResourceLock::CResourceLock(HINSTANCE hInstance)
    {
    m_hInstance = AfxGetResourceHandle();
    AfxSetResourceHandle(hInstance);
    }CResourceLock::~CResourceLock()
    {
    AfxSetResourceHandle(m_hInstance);
    }
      

  2.   

    上面写错几个字,应该是
    需要在创建对话框之前将当前资源的handle切换到动态库的资源句柄这个问题,我以前碰到过