C#学习教程:访问违规读取位置0x0000000c但是,当我连续按Tab键时,出现以下错误。错误..Timer_soosai.exe中0x00352d58处的未处理异常:0xC0000005:访问冲突读取位置0x0000000c。00352D58moveax,dwordptr[ecx+0Ch]/*这是导致错误排除的行。*/代码:[DllImport("user32",EntryPoint="SetWindowsHookExA",CharSet=CharSet.Ansi,SetLastError=true,ExactSpelling=true)]publicstaticexternintSetWindowsHookEx(intidHook,LowLevelKeyboardProcDelegatelpfn,inthMod,intdwThreadId);[DllImport("user32",EntryPoint="UnhookWindowsHookEx",CharSet=CharSet.Ansi,SetLastError=true,ExactSpelling=true)]publicstaticexternintUnhookWindowsHookEx(inthHook);公共委托intLowLevelKeyboardProcDelegate(intnCode,intwParam,refKBDLLHOOKSTRUCTlParam);[DllImport("user32",EntryPoint="CallNextHookEx",CharSet=CharSet.Ansi,SetLastError=true,ExactSpelling=true)]publicstaticexternintCallNextHookEx(inthHook,intnCode,intwParam,refKBDLLHOOKSTRUCTlParam);publicconstintWH_KEYBOARD_LL=13;/*禁用开始菜单所需的代码*/[DllImport("user32.dll")]privatestaticexternintFindWindow(stringclassName,stringwindowText);[DllImport("user32.dll")]privatestaticexternintShowWindow(inthwnd,intcommand);私人常数intSW_HIDE=0;私人常数intSW_SHOW=1;publicstructKBDLLHOOKSTRUCT{publicintvkCode;公共int扫描代码;公共int标志;公共时间;公共诠释dwExtraInfo;}publicstaticintintLLKey;publicintLowLevelKeyboardProc(intnCode,intwParam,refKBDLLHOOKSTRUCTlParam){boolblnEat=false;switch(wParam){case256:case257:case260:case261://Alt+Tab,Alt+Esc,Ctrl+Esc,Windows键,blnEat=((lParam.vkCode==9)&&(lParam.flags==32))|((lParam.vkCode==27)&&(lParam.flags==32))|((lParam.vkCode==27)&&(lParam.flags==0))|((lParam.vkCode==91)&&(lParam.flags==1))|((lParam.vkCode==92)&&(lParam.flags==1))|((lParam.vkCode==73)&&(lParam.flags==0));休息;}如果(blnEat==真){返回1;}else{returnCallNextHookEx(0,nCode,wParam,reflParam);}}公共无效KillStartMenu(){inthwnd=FindWindow("Shell_TrayWnd","");ShowWindow(hwnd,SW_HIDE);}privatevoidLogin_Load(objectsender,EventArgse){intLLKey=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,Services.Runtime.InteropMarshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0]).ToInt32(),0);在这种情况下,任何人都可以帮助我提前致谢..你的P/Invoke声明都是错误的,使用“int”,其中需要IntPtr。此代码在64位版本的Windows上确实是炸弹。通过从pinvoke.net获取正确的声明来解决它们看起来你在某处取消引用NULL(即零指针)。虽然NULL不是正式的零,但它实际上是正确的。(这不是零指针的实际取消引用,因为代码假定从那里有一个结构并且正在访问该结构的第4个字。)检查您调用代码的任何地方是否有空或零参数。还可以考虑将所有对低级API的调用设为私有,并使用保护所有参数的安全版本对其进行包装。我不能再诊断了;您没有提供足够的信息(好吧,至少它对我有用;更有经验的人可能会提供帮助)。以上就是C#学习教程的全部内容:访问冲突读取位置0x0000000c。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
