繁体   English   中英

需要帮助创建Windows dll

[英]need help creating windows dll

我是Windows编程的新手(我对c和c ++不太了解)。 我正在尝试创建用于注册用于键盘的Windows钩子的Windows dll。我正在使用带有MinGW的Eclipse CDT(因为我不想使用Visual Studio)来创建dll。我能够为以下程序创建dll( 从此处复制 ),但是当我尝试从另一个程序加载它时,它挂起,没有任何错误消息。

#include <windows.h>
#include <iostream>
#include <stdio.h>
#include<windef.h>
#ifdef __MINGW32__
# define __in
# define __in_z
# define __in_z_opt
#endif
#define WIN32_LEAN_AND_MEAN
#include <d3d9.h>


HINSTANCE hinst;
HHOOK hhk;


LRESULT CALLBACK wireKeyboardProc(int code,WPARAM wParam,LPARAM lParam) {
 FILE * fileLog = fopen("C:\\try.txt", "a+");
 fprintf(fileLog,"OK");
 CallNextHookEx(hhk,code,wParam,lParam);
 fclose(fileLog);
 return 0;
}

extern "C" __declspec(dllexport) void install() {
 hhk = SetWindowsHookEx(WH_KEYBOARD, wireKeyboardProc, hinst, NULL);
}
extern "C" __declspec(dllexport) void uninstall() {
 UnhookWindowsHookEx(hhk);
}

BOOL WINAPI DllMain(   __in HINSTANCE hinstDLL,
        __in DWORD fdwReason,
        __in LPVOID lpvReserved
  ) {

 hinst = hinstDLL;
 return TRUE;
}

这是MinGW的问题吗? 感谢您的帮助。谢谢。 下面是加载dll的测试程序。

#include <iostream>
#include <stdio.h>
#include <windows.h>
#include<windef.h>
#define WIN32_LEAN_AND_MEAN
#include <d3d9.h>


int main()
{

 HINSTANCE hinst = LoadLibrary("libTestHook.dll");
 if (hinst == NULL)
 {
  printf("null hinst");
 }
 typedef void (*Install)();
 typedef void (*Uninstall)();

 Install install = (Install) GetProcAddress(hinst, "install");
 Uninstall uninstall = (Uninstall) GetProcAddress(hinst, "uninstall");


 install();
 int foo;
 std::cin >> foo;

 uninstall();
 return 0;

}

libTestHook.dll是创建的dll

您的钩子dll似乎还不错(除了您可能必须使用CallNextHookEx的返回值)。 但是,如果我在控制台应用程序中使用它,它将挂起; 如果我在Windows应用程序中使用它就可以了。 这可能是由于挂钩取决于Windows消息队列这一事实。

另请参见此C ++控制台应用程序,SetWindowsHookEx,从不调用回调

我不认为它挂了 键盘挂钩通常会执行“主事件循环”,直到程序关闭。 在这种情况下,我认为这是什么回事。 您的程序正在运行,从dll调用所需的例程,然后dll不断处理事件。
话虽如此,窗户似乎与终端和mingw做一些奇怪的事情。 更具体地说,它的运行效果不佳,就像使用MSVS时一样。 也许这也可能是您遇到问题的原因-MinGW像gcc一样或多或少地编译了东西,但是MSVS的cl在打开终端并打印到它们的过程中添加了奇怪的声明,等等。

当然,请注意,有时需要在代码中调用install()uninstall()函数-我假设您已经完成了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM