我有一个主程序和几个扩展DLL,扩展DLL导出类给主程序使用,
现在想把每个扩展DLL中的资源分别分离到几个资源DLL中。
现在资源DLL(被扩展DLL调用)的入口函数如下:
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
return 1; // ok
}
这样调用资源就是不成功!
但改成如下:
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
if (!AfxInitExtensionModule(Dll1Res, hInstance))
return 0;
new CDynLinkLibrary(Dll1Res);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
AfxTermExtensionModule(Dll1Res);
}
return 1; // ok
}
RELEASE版的就可成功,但DEBUG版还是不行。
其中扩展DLL(被主程序调用)的入口函数如下:
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
m_hResDll = AfxLoadLibrary("Dll1Res.dll");
m_hinstold = AfxGetResourceHandle();
AfxSetResourceHandle(m_hResDll);
if (!AfxInitExtensionModule(Dll1DLL, hInstance))
return 0;
new CDynLinkLibrary(Dll1DLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
AfxSetResourceHandle(m_hinstold);
AfxFreeLibrary(m_hResDll);
AfxTermExtensionModule(Dll1DLL);
}
return 1; // ok
}
请各位指点?小弟感恩不尽!
---------------------------------------------------------------
HINSTANCE m_hinstold;
HINSTANCE m_hResDll;
static AFX_EXTENSION_MODULE Dll1Res = { NULL, NULL };
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
...
m_hResDll = AfxLoadLibrary("Dll1Res.dll");
if (!AfxInitExtensionModule(DllRes, m_hResDll)
return 0;
new CDynLinkLibrary(Dll1DLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
AfxFreeLibrary(m_hResDll);
AfxTermExtensionModule(Dll1DLL);
}
return TRUE; // ok
}
资源DLL(Dll1Res.dll)的程序如下:
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
现在想把每个扩展DLL中的资源分别分离到几个资源DLL中。
现在资源DLL(被扩展DLL调用)的入口函数如下:
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
return 1; // ok
}
这样调用资源就是不成功!
但改成如下:
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
if (!AfxInitExtensionModule(Dll1Res, hInstance))
return 0;
new CDynLinkLibrary(Dll1Res);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
AfxTermExtensionModule(Dll1Res);
}
return 1; // ok
}
RELEASE版的就可成功,但DEBUG版还是不行。
其中扩展DLL(被主程序调用)的入口函数如下:
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
m_hResDll = AfxLoadLibrary("Dll1Res.dll");
m_hinstold = AfxGetResourceHandle();
AfxSetResourceHandle(m_hResDll);
if (!AfxInitExtensionModule(Dll1DLL, hInstance))
return 0;
new CDynLinkLibrary(Dll1DLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
AfxSetResourceHandle(m_hinstold);
AfxFreeLibrary(m_hResDll);
AfxTermExtensionModule(Dll1DLL);
}
return 1; // ok
}
请各位指点?小弟感恩不尽!
---------------------------------------------------------------
HINSTANCE m_hinstold;
HINSTANCE m_hResDll;
static AFX_EXTENSION_MODULE Dll1Res = { NULL, NULL };
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
...
m_hResDll = AfxLoadLibrary("Dll1Res.dll");
if (!AfxInitExtensionModule(DllRes, m_hResDll)
return 0;
new CDynLinkLibrary(Dll1DLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
AfxFreeLibrary(m_hResDll);
AfxTermExtensionModule(Dll1DLL);
}
return TRUE; // ok
}
资源DLL(Dll1Res.dll)的程序如下:
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);