我有一个dll,里面有一个对话框资源,当我的程序加载这个dll的时候,调用dll中的函数显示那个dll中的对话框。
我得dll是win32 dll,不是MFC的所以没法使用AfxSetResourceHandle(hResource);请问在win32程序里有什么方法使用指定的资源么?

解决方案 »

  1.   

    在load资源时,制定instance为dll的instance即可。一般load资源的api都有这样一个参数
    比如说LoadString,第一个参数就是
      

  2.   

    而dll的instance在dllmain中会传给你
      

  3.   

    _AFXWIN_INLINE void AFXAPI AfxSetResourceHandle(HINSTANCE hInstResource)
    { ASSERT(hInstResource != NULL); afxCurrentResourceHandle = hInstResource; }
    #define afxCurrentResourceHandle    AfxGetModuleState()->m_hCurrentResourceHandle
    显然这东西是MFC特有的,按我的水平我认为,要在非MFC程序中像在MFC程序那样通过指定DLL的句柄而使用该DLL中的资源是不行的,所以你只能在DLL做出一个函数使用相应的资源造成相应的对话框,然后再在别的程序调用了。
    按我的水平也就能这么解决了,希望你能找到更完美的方法。
      

  4.   

    回复人: pipilupzj(皮皮鲁) ( ) 信誉:100  2006-1-30 23:13:21  得分: 0  
     
     
       
    在load资源时,制定instance为dll的instance即可。一般load资源的api都有这样一个参数
    比如说LoadString,第一个参数就是  
     
    =================
    这个我也知道,可是MAKEINTRESOURCE(X)得到的LPCTSTR 是个错误的指针?
    难道就不能用ID的方式使用资源了么?
      

  5.   

    错误的指针没有关系LoadString内部会判断这是一个指针还是一个ID,如果传入的这个值小于或者等于0xFFFF,则LoadString将之当作一个ID处理,否则就当一个指针处理。但是这个函数只有一个原形,为了满足编译器的需求,所以使用MAKEINTRESOURCE,将ID强制转换成指针即可
      

  6.   

    stdafx.h
    ////////////////////////////////////////////////#pragma once
    #define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
    // Windows 头文件:
    #include <windows.h>extern HINSTANCE g_hDllInst;
    MyDll.cpp
    /////////////////////////////////////#include "stdafx.h"
    HINSTANCE g_hDllInst = NULL;BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    {
        switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    g_hDllInst=(HINSTANCE)hModule;
    break;
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    break;
        }
        return TRUE;
    }
    MyClass.cpp
    ////////////////////////////////////
    #include "stdafx.h"
    #include "resource.h"void MyProc()
    {
    int r = DialogBox(g_hDllInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,NULL);
    if(r>0)
    MessageBox(NULL,"这是dll中的资源",NULL,NULL);
    ...
    }
      

  7.   

    写了个简单的win32例子,没有问题啊.
      

  8.   

    AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
    跟这个宏相关的几个函数,具体忘了,你自己找去。
      

  9.   

    http://topic.csdn.net/T/20040821/12/3296255.html