windowsform dllmain 动态库
windowsform dllmain dynamic library
计算器
我遇到了一个问题,所以我以 windows 形式制作了一个应用程序,但现在我想让它显示,因为我将它注入了一个动态库而不是一个可执行文件,我知道你将它用于 winapi
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hModule);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&showform, NULL, 0, 0);
break;
case DLL_THREAD_ATTACH: break;
case DLL_THREAD_DETACH: break;
case DLL_PROCESS_DETACH: break;
}
return TRUE;
}
我试过 windows 形式
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hinstDLL);
hProcessCenter = ::FindWindow(NULL, _T("WINDOW"));
}
return 1;
}
我收到 windows 表单的这些错误:
错误 1 错误 C3641:'DllMain':使用 /clr:pure 或 /clr:safe
编译的函数的调用约定“__stdcall”无效
错误 2 错误 C2065:'hProcessCenter':未声明的标识符
错误 3 错误 C3861:“_T”:找不到标识符
我希望有人能帮助我
嗯,对于错误 1,我会参考此处接受的答案中的示例,以正确包含:How to specify dll onload function for mingw32?
错误 2 表示您需要在某个地方的 DllMain(...) 函数中定义 "hProcessCenter"。可能,因为您没有在某处使用变量,您可以将行转换为 ::FindWindow(NULL, _T("WINDOW"));
以获得可编译代码。
对于错误3,您需要确保编译时支持Unicode。否则找不到宏 _T
(What does _T stands for in a CString).
要更正错误 #1,您应该编译为本机代码而不是托管代码
修复错误 #2:
HWND hProcessCenter;
if (fdwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hinstDLL);
hProcessCenter = ::FindWindow(NULL, _T("WINDOW"));
}
修复错误 #3:
#include <tchar.h>
计算器 我遇到了一个问题,所以我以 windows 形式制作了一个应用程序,但现在我想让它显示,因为我将它注入了一个动态库而不是一个可执行文件,我知道你将它用于 winapi
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hModule);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&showform, NULL, 0, 0);
break;
case DLL_THREAD_ATTACH: break;
case DLL_THREAD_DETACH: break;
case DLL_PROCESS_DETACH: break;
}
return TRUE;
}
我试过 windows 形式
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hinstDLL);
hProcessCenter = ::FindWindow(NULL, _T("WINDOW"));
}
return 1;
}
我收到 windows 表单的这些错误:
错误 1 错误 C3641:'DllMain':使用 /clr:pure 或 /clr:safe
编译的函数的调用约定“__stdcall”无效错误 2 错误 C2065:'hProcessCenter':未声明的标识符
错误 3 错误 C3861:“_T”:找不到标识符
我希望有人能帮助我
嗯,对于错误 1,我会参考此处接受的答案中的示例,以正确包含:How to specify dll onload function for mingw32?
错误 2 表示您需要在某个地方的 DllMain(...) 函数中定义 "hProcessCenter"。可能,因为您没有在某处使用变量,您可以将行转换为 ::FindWindow(NULL, _T("WINDOW"));
以获得可编译代码。
对于错误3,您需要确保编译时支持Unicode。否则找不到宏 _T
(What does _T stands for in a CString).
要更正错误 #1,您应该编译为本机代码而不是托管代码
修复错误 #2:
HWND hProcessCenter;
if (fdwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hinstDLL);
hProcessCenter = ::FindWindow(NULL, _T("WINDOW"));
}
修复错误 #3:
#include <tchar.h>