我遇到了一个问题,所以我用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':未找到标识符
我希望有人能帮我
发布于 2016-10-22 11:52:27
要纠正错误#1,您应该编译成本机代码,而不是托管代码。
修正错误#2:
HWND hProcessCenter;
if (fdwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hinstDLL);
hProcessCenter = ::FindWindow(NULL, _T("WINDOW"));
}修正错误#3:
#include <tchar.h>发布于 2016-10-22 10:05:50
对于错误1,我会参考这里接受的答案中的示例,以获得正确的包含:How to specify dll onload function for mingw32?
错误2说明您需要在您的hProcessCenter(.)中定义“DllMain”在某个地方发挥作用。可能,因为您没有在某个地方使用该变量,所以可以将行转换为::FindWindow(NULL, _T("WINDOW"));,使其具有可编译的代码。
对于错误3,需要确保使用Unicode支持进行编译。否则,找不到宏_T (T stands for in a CString)。
https://stackoverflow.com/questions/40190715
复制相似问题