草庐IT

c++ - Win32 API 函数与它们的 CRT 对应函数(例如 CopyMemory 与 memcpy)

在编写Win32C/C++代码时,使用lstrcpyn或CopyMemory等Windows特定函数代替相应的CRT函数是否有任何优势(例如性能?)(除了CRT功能的可移植性)? 最佳答案 至少一些CRT函数在内部使用Win32函数。此外,CRT需要额外的初始化(例如strtok等函数的线程特定数据)和清理,您可能不希望发生这些事情。你可以创建一个普通的Win32应用程序,而不依赖于任何其他东西,包括CRT(很像你可以使用NTDLL.DLL创建一个普通的NT应用程序-我想想Windows的smss.exe就是这样一个进程BTW)。话

c++ - 什么会导致 VTable 指针在 Win32 调试版本中为 0xdddddddd?

我正在调试一个缺陷,并将其缩小到一个对象的vtable指针为0xdddddddd。Thisanswer表示Win32调试版本通常会将死内存或已删除的内存设置为此特殊值。请注意,指针本身看起来是有效的,它只是vtable指针0xdddddddd。这是一段代码:std::list::const_iteratorit;for(it=myObjects.begin();it!=myObjects.end();++it){IMyObject*pMyObject=*it;if(pMyObject==0)continue;pMyObject->someMethod();//Accessviolati

c++ - WIN32 在哪里定义,我如何在我的项目中包含这个定义?

我在我的项目中包含了第三方头文件和源文件。标题的顶部是这样的:#ifdefined(WIN32)||defined(WIN16)#ifndefMSDOS#defineMSDOS#endif#endif#include#include#ifndefMSDOS#include#endif#include"des.h"问题是#ifdefined(WIN32)失败并且在尝试#includeunistd.h时编译失败,我不想这样做。我有使用此头文件的第三方项目,即WIN32已定义,但它不会尝试包含在VisualStudio中,我在“WIN32”上执行了“转到定义”,并被带到WinDefs中的以下

c++ - Win32API 结构中 cbSize 成员的用途是什么

我经常遇到一些具有cbSize成员的Win32API结构(但不限于此)的定义,如下例所示。typedefstruct_TEST{intcbSize;//othermembersfollow}TEST,*PTEST;然后我们像这样使用它:TESTt={sizeof(TEST)};...或TESTt;t.cbSize=sizeof(TEST);...我最初的猜测是这可能用于版本控制。像这样接收结构指针的DLL可以检查cbSize成员是否具有用于编译DLL的预期值。或者检查是否为结构完成了正确的包装。但我想听听您的意见。在Win32API的一些C++结构中,cbSize成员的用途是什么?

c++ - 用于进行通配符字符串匹配的 Win32 API

我正在寻找通配符字符串匹配API(不是正则表达式匹配)。除了Win32API,我不能使用任何东西。 最佳答案 有PathMatchSpec-但处理专门针对文件,因此如果您需要一般的通配符匹配,结果可能不是您所期望的。否则,您可能应该使用RegEx,正如Pavel详述的那样。[编辑]我错误地假设PathMatchSpec共享FindFirstFile/FindNextFile的属性.我已经进行了一些测试-它没有。所以它看起来是最佳人选。 关于c++-用于进行通配符字符串匹配的Win32AP

c++ - 仅使用关键部分的 Win32 读/写锁定

作为工作项目的一部分,我必须使用Win32api在C++中实现读/写锁。所有现有解决方案都使用需要在执行期间进行上下文切换的内核对象(信号量和互斥量)。这对我的应用程序来说太慢了。如果可能的话,我想只使用关键部分来实现一个。锁不一定是进程安全的,只是线程安全的。关于如何解决这个问题有什么想法吗? 最佳答案 如果您可以针对Vista或更高版本,您应该使用内置的SRWLock's.它们像关键部分一样轻量级,在没有争用时完全处于用户模式。JoeDuffy的博客最近有一些entries关于实现不同类型的非阻塞读/写锁。这些锁是旋转的,所以如

Win10 搜索功能(WIN+S)、截图键(WIN+SHIFT+S)和屏幕键盘同时失效没反应怎么办?

巨硬也不好好修一修win10bug,电脑有一天突然这几个功能都失效了,搜了一大堆也找不到解决方法,结果有一天在搞FTP的时候新建了一个本地用户,结果再回来的时候这些bug都消失了,估计是新建用户初始化了一次配置文件。下面是新建用户的操作方法,首先打开设置win+i搜索添加、编辑,点这个点击将其他人添加到这台电脑点击我没有这个人的登录信息 再点击添加一个没有Microsoft账户的用户然后自己设置一下用户名和密码以及安全问题然后打开开始界面右键自己的账户  切换到自己新注册的用户名(我自己注册的用户名是Guest1)Guest是默认的用户名最后再从新建用户切换回来就会发现功能键好使了。官方说我发

c++ - x64 构建 : error MSB8013: This project doesn't contain the Configuration and Platform combination of Debug|Win32

我正在尝试为具有许多解决方案(一些用于CI,一些用于开发人员)和数百个项目的复杂构建运行纯x64构建,并遇到“错误MSB8013:该项目不包含配置和Debug|Win32的平台组合”我已将其简化为一个简单的配置:解决方案A包含项目X和项目Y。项目X有一个项目引用项目Y。解决方案B包含也包含项目X。所有项目或解决方案都不包含Win32平台-它已被删除。当我构建解决方案B(作为x64)时,我收到errorMSB8013:Thisprojectdoesn'tcontaintheConfigurationandPlatformcombinationofDebug|Win32错误信息有时包含额外

C++ Win32 在 WM_DEVICECHANGE 上未收到 DBT_DEVICEARRIVAL 或 DBT_DEVICEREMOVECOMPLETE

我一直致力于检测USB插入/移除。我已经使用CreateWindowEx()实现了代码,通过我的窗口进程回调传递了一个WNCLASSEX。在插入和移除USB时,我成功收到WM_DEVICECHANGE消息,但wParam始终设置为DBT_DEVNODES_CHANGED。我从来没有得到DBT_DEVICEARRIVAL或DBT_DEVICEREMOVECOMPLETE。我一直在使用我得到的东西,但我确实需要能够区分设备到达和移除之间的区别,以便我可以根据收到的设备采取不同的操作。现在,我必须在收到DBT_DEVNODES_CHANGED后设置一个计时器,然后测试系统上是否有任何新的可移

c++ - 在Win10上用VS2015编译的C++ SDL2程序调试加载时间错误

我正在使用VisualStudio2015在64位Windows10上使用SDL2在C++中编写一个项目。我最近购买了一台新的Windows10笔记本电脑并从github克隆了我的项目。我的项目编译正确,但在运行时出现以下错误:Theapplicationwasunabletostartcorrectly(0xc000007b).ClickOKtoclosetheapplication.根据我目前的研究,这个错误通常是由加载不兼容的DLL引起的,例如64位版本而不是32位版本。到目前为止我发现的建议包括:检查我使用的是32位版本的SDL2DLL安装/重新安装适用于VisualStudi