求助啊程序运行时出错,实在摆不平
时间:2011-12-13
来源:互联网
以下是弹出的错误..
--------------------------------------------------
Debug Error!
Progrma:c:\windows\notepad.exe
R6031
-Attempt to initialize the CRT more than once
This indicates a bug in your application
---------------------------------------------------
是一个键盘钩子,钩子用动态链接库实现
以下部分钩子代码..
C/C++ code
总之只要一调用安装钩子函数就报那个错,而且是在运行后第一次触发键盘消息的时候报,只要我在哪触发消息哪个程序就立马崩掉。问题应该就在DLL里,我个人觉得会不会数据共享那有问题?
求解啊各位大神帮帮忙...折腾一天了...就是不行
--------------------------------------------------
Debug Error!
Progrma:c:\windows\notepad.exe
R6031
-Attempt to initialize the CRT more than once
This indicates a bug in your application
---------------------------------------------------
是一个键盘钩子,钩子用动态链接库实现
以下部分钩子代码..
C/C++ code
hook.h #ifdef __cplusplus #define EXPORT extern "C" __declspec (dllexport) #else #define EXPORT __declspec (dllexport) #endif EXPORT BOOL CALLBACK InstallHook (HWND hw, UINT msg); EXPORT BOOL CALLBACK UninstallHook (); EXPORT LRESULT CALLBACK HookProc (int dwCode, WPARAM wParam, LPARAM lParam); hook.cpp #include <windows.h> #include "hook.h" #pragma comment(linker,"/SECTION:.bss,S") HINSTANCE hInst; HWND hwnd; UINT message; HHOOK hHook; char szAssic[4]; EXPORT BOOL CALLBACK InstallHook (HWND hw, UINT msg) { hwnd = hw; message = msg; hHook = SetWindowsHookEx (WH_KEYBOARD, HookProc, hInst, NULL);//只要去除SetWindowsHookEx这个函数就不会报错..即使把钩子回调函数是个空的依然报错,只要这个函数调用存在 if (hHook) return true; else return false; }
总之只要一调用安装钩子函数就报那个错,而且是在运行后第一次触发键盘消息的时候报,只要我在哪触发消息哪个程序就立马崩掉。问题应该就在DLL里,我个人觉得会不会数据共享那有问题?
求解啊各位大神帮帮忙...折腾一天了...就是不行
作者: xuqiqw 发布时间: 2011-12-13
求助各位,谁来帮帮忙..
作者: xuqiqw 发布时间: 2011-12-13
C/C++ code
这是我以前写的,能运行。
一般出错都是SetWindowsHookEx的参数设置出错,像这种调API的出错,最好用::GetLastError()获取错误代码,然后查MSDN。
http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx
#include <windows.h> #include <stdio.h> #ifndef WH_KEYBOARD_LL #define WH_KEYBOARD_LL 13 #endif //#pragma data_seg ("shareddata") HHOOK g_HookKeybord = NULL; //#pragma data_seg() //#pragma comment(linker,"/section:shareddata,RWS") LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam) { return CallNextHookEx(g_HookKeybord,nCode,wParam,lParam); } void SetKeybordHook(DWORD dwThreadId) { if (dwThreadId == -1) MessageBox(NULL, "-1", NULL, MB_OK); g_HookKeybord = ::SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, ::GetModuleHandle("HookKeybord"), dwThreadId); if (NULL == g_HookKeybord) { char cstr_err[128]; sprintf(cstr_err, "last error %d", ::GetLastError()); MessageBox(NULL, cstr_err, "", MB_OK); } }
这是我以前写的,能运行。
一般出错都是SetWindowsHookEx的参数设置出错,像这种调API的出错,最好用::GetLastError()获取错误代码,然后查MSDN。
http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx
作者: et214721856 发布时间: 2011-12-13
引用 2 楼 et214721856 的回复:
C/C++ code
#include <windows.h>
#include <stdio.h>
#ifndef WH_KEYBOARD_LL
#define WH_KEYBOARD_LL 13
#endif
//#pragma data_seg ("shareddata")
HHOOK g_HookKeybord = NULL;
//#pragm……
C/C++ code
#include <windows.h>
#include <stdio.h>
#ifndef WH_KEYBOARD_LL
#define WH_KEYBOARD_LL 13
#endif
//#pragma data_seg ("shareddata")
HHOOK g_HookKeybord = NULL;
//#pragm……
调用没有失败......
作者: xuqiqw 发布时间: 2011-12-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28