我有一个dll,里面有一个对话框资源,当我的程序加载这个dll的时候,调用dll中的函数显示那个dll中的对话框。
我得dll是win32 dll,不是MFC的所以没法使用AfxSetResourceHandle(hResource);请问在win32程序里有什么方法使用指定的资源么?
我得dll是win32 dll,不是MFC的所以没法使用AfxSetResourceHandle(hResource);请问在win32程序里有什么方法使用指定的资源么?
比如说LoadString,第一个参数就是
{ ASSERT(hInstResource != NULL); afxCurrentResourceHandle = hInstResource; }
#define afxCurrentResourceHandle AfxGetModuleState()->m_hCurrentResourceHandle
显然这东西是MFC特有的,按我的水平我认为,要在非MFC程序中像在MFC程序那样通过指定DLL的句柄而使用该DLL中的资源是不行的,所以你只能在DLL做出一个函数使用相应的资源造成相应的对话框,然后再在别的程序调用了。
按我的水平也就能这么解决了,希望你能找到更完美的方法。
在load资源时,制定instance为dll的instance即可。一般load资源的api都有这样一个参数
比如说LoadString,第一个参数就是
=================
这个我也知道,可是MAKEINTRESOURCE(X)得到的LPCTSTR 是个错误的指针?
难道就不能用ID的方式使用资源了么?
////////////////////////////////////////////////#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);
...
}
跟这个宏相关的几个函数,具体忘了,你自己找去。