我编写的静态链接库经常出现问题(或者在某些情况下,代码是从开放源代码中积累的)。该库名为,是MFC工具箱库的名称,它具有许多免费函数,类等,它们支持MFC编程,Win32API编程以及古老的C库和较新的C++标准库。简而言之,这是一个工作库,其中包含适用于我的日常工作的工具,我已经积累了十多年,对于我们的产品是必不可少的。因此,它具有所有这些各种技术的实用程序和增强功能的丰富组合,并且通常在内部将所有这些技术的使用混合在一起以提供进一步的支持。例如,我有一个StringUtilities.h和StringUtilities.cpp,它们提供了大量与字符串相关的自由功能,甚至一两个类。通
我正在尝试通过使用boost:threads而不是我们自己的Win32线程包装器来提高C++应用程序的可移植性,而优雅的线程终止问题(再次)又浮出水面。在纯win32上,我使用QueueUserAPC来“中断”线程抛出一个“thread_interrupt”异常,导致所有RAII对象在退出时被清理,asdescribedhere.任何“可警报”操作系统功能都可以通过这种方式中断,因此互斥等待、sleep、串行和套接字I/O等都是可能的中断点。但是,boost:mutexes等在win32上不会被QueueUserAPC“警告”——它们调用诸如Sleep(n)而不是SleepEx(n,t
我有一个动态加载插件DLL的C++应用程序。DLL通过std::cout和std::wcout发送文本输出。基于Qt的UI必须抓取DLL的所有文本输出并显示它。由于运行时库的差异,DLL可能具有不同的cout/wcout实例,因此使用流缓冲区替换的方法并不完全有效。因此,我应用了Windows特定的STDOUT重定向,如下所示:StreamReader::StreamReader(QObject*parent):QThread(parent){//void}voidStreamReader::cleanUp(){//restorestdoutSetStdHandle(STD_OUTPU
这是一个非常低级的问题,但也许这里有人有一些见解......我遇到了一个问题,未处理的SEH异常(例如访问冲突)似乎在Win32消息调度级别被捕获,而不是终止程序。我找到了以下引用博客,它解释了问题,但仅在WM_TIMER消息的上下文中:http://bugswar.blogspot.com/2010/07/why-its-not-crashing.html我在Win2008R2和“正常”消息(例如:WM_COMMAND等)上遇到了问题。我怀疑可能是Windows试图通过屏蔽异常来“帮助”,但我希望它出错;“继续并忽略”行为通常会导致应用程序出现问题。我意识到我可以尝试将每个函数包装在
我有许多无法修改的应用程序(无源代码),它们被硬编码为在0,0处绘制。通常这不是问题,但是出现了一个新项目(kiosk),我需要在这些应用程序的外部画一个边界。我正在寻找一种方法来更改显示范围:X:0to1200Y:0to900类似于:X:-100to1100Y:-100to800我在MSDN上看到了几个函数,如SetViewportExtEx、SetWorldTransform,它们符合需要,但是如果我正确理解它们,它们就不会在系统范围内进行更改。它们仅适用于当前进程。我正在用C++编程,但如果注册表/控制面板/等中有设置也可以。有没有人以前做过这样的事情?编辑1:窗口位置硬编码为0
我编写了以下代码(C++Win32)来捕获游戏窗口屏幕并从图像中获取像素颜色数组。函数autoB()完成这项工作。然后我将结果数组绘制到我的窗口中以直观地检查我得到了什么。问题是这个程序只在我启动计算机后运行一次,在第一次“缓存”从游戏中截取的第一个屏幕截图后,我总是得到相同的像素阵列。即使我关闭并重新启动程序,我也会得到相同的屏幕截图。游戏未使用DirectX在屏幕上绘图,我始终可以使用Alt+PrtSc截取屏幕截图。如果您能帮助理解为什么会这样发生,我们将不胜感激。intgetPixels(HDC*eClientHdcMem,HBITMAP*eClientBmp,unsignedc
这个问题来自这个线程:NativeC++useC#dllviaproxyC++manageddll简而言之,我正在通过DLL将(我的)C#扩展加载到native进程中。扩展需要显示一个表单,以便用户可以控制它。我使用的是标准.NET表单,没有第3方库或任何东西,而且我的表单没有显示。更糟糕的是,它会挂起目标进程。它没有使用任何CPU,所以我感觉它在等待某个函数返回,但从未这样做过。同样有趣的是弹出了“Initializemethod”消息框,但没有弹出“Test”消息框。我已经测试了所有我能想到的东西(STAthread、线程、DisableThreadLibraryCalls,以及不
friend们,我正在尝试实现一个WindowsAPI的包装器,我想从父窗口捕获子窗口事件,所以我做了一个简单的事件处理程序。我使用函数指针来存储回调函数。我是用静态函数做的。请参阅下面的代码。classWidget;typedefvoid(*EventProc)(MSG*EventArgs);classWidget{public:///ConstructorsdestructorandmethodsforRegisteringandCreatingWindowsstaticLRESULTCALLBACKMainProc(HWNDhWnd,UINTmsg,WPARAMwParam,LP
我开发了一个我多年来一直致力于开发的C++应用程序。我们最近在我们的测试实验室中添加了大约4个处理器测试机。这样做之后,我们发现负载下的特定测试间歇性地导致LdrpLoaderLock死锁,拥有的线程不再运行。拥有的线程ID通常在数字上具有暗示性,因为从正在运行的线程推断出可能的线程ID,并且锁内存结构看起来没有损坏。我在调试器中没有遇到这个问题。我只能在它发生后才能看到它。我开始记录我正在创建的所有线程,但我没有在其中看到问题线程ID。但这可能没有意义,因为在发生死锁后,日志记录可能无法正常工作。我想我需要一种方法来跟踪线程创建和入口点,以便我可以找出哪个线程正在执行此操作。感谢您的
我正在将一个在Visualc++6.0中创建的旧Cwindows驱动程序项目导入到visualstudio2012中。定义结构的方式导致vs2012中出现错误。typedefstruct{LINKLink;HANDLEhFile;BYTEhandleType;OVERLAPPEDOverlapped;CRITICAL_SECTIONcsIoCtrl;}USB_HANDLE,*PUSB_HANDLE;typedefstruct{USB_HANDLE;//erroroccursheresayingnothingwasdeclaredforUSB_HANDLELISTPipeList;BOO