
VC++
Frozen2022
这个作者很懒,什么都没留下…
展开
-
visual studio编译报错“常量中有换行符”等字符串中的错误
2、在文件中加入文件编码的编译指令。1、确定报错相关文件编码。原创 2023-01-10 18:12:05 · 803 阅读 · 1 评论 -
COM与虚继承
通常会将不同的功能划分到不同的COM接口,到继承并实现具体功能的类。通过一个实现QueryInterface/AddRef/Release等公共函数的类,对外部暴露单一的接口,而实现COM组件的DLL封装。例如:class IMyCom1 : public IUnknown{public: virtual int add(int x, int y) = 0; virtual int sub(int x, int y) = 0;};class IMyCom2 : public IUnkn原创 2022-05-10 19:38:19 · 230 阅读 · 0 评论 -
Windows的SendInput在一些进程中不生效
MSDN给出了答案:This function is subject to UIPI. Applications are permitted to inject input only into applications that are at an equal or lesser integrity level.也就是:调用SendInput的进程的运行权限至少与目标进程一致。...原创 2021-12-28 14:18:44 · 1338 阅读 · 0 评论 -
VS链接错误:Fatal Error C1060
compiler is out of heap spaceThe operating system or run-time library cannot fill a request for memory.To fix this error try the following possible solutions If the compiler also issues errorsC1076andC3859, use the/Zmcompiler option to lower th...转载 2021-08-31 22:53:20 · 882 阅读 · 0 评论 -
只读大文件映射读写内存
对于大的只读文件(如光盘文件):CreateFile(...,GENERIC_READ,...);在进行解密校验等需要的操作时时,为了效率最佳(不拷贝一个临时的可读写文件)。需要创建一个可读写的文件内存映射:CreateFileMapping(...,PAGE_WRITECOPY,...);再获取内存:MapViewOfFile(...,FILE_MAP_COPY,...);此时创建的内存可进行读写!...原创 2021-05-04 11:23:27 · 305 阅读 · 0 评论 -
vs工程中启动编译asm(汇编)源文件的功能
1、点击要启动汇编编译的的工程名称2、顶部菜单中:选择项目的生成->自定义3、勾选asm选项,确定即可。4、此时汇编源文件即可参与编译原创 2021-01-20 19:32:20 · 1852 阅读 · 0 评论 -
vs制作的lib中,某些obj提示: error LNK2026: 模块对于 SAFESEH 映像是不安全的。
在vs的解决方案管理器中中,找到obj对应的.c或.cpp或.asm等源文件,单击右键:找到advanced->Use Safe Exception Handlers,选择 是(/safeseh)原创 2021-01-20 19:26:21 · 368 阅读 · 0 评论 -
ShellExecute API详解。通过在资源管理器(explorer)中打开文件夹和在默认浏览器中打开url链接等
使用样例:#include <Windows.h>#include <shellapi.h>#pragma comment(lib,"Shell32.lib")void test(){ //ShellExecute是内部是通过使用Windows Shell提供的COM接口实现的,必须初始化COM CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); // 使用wi原创 2020-05-16 13:00:40 · 1806 阅读 · 0 评论 -
windows获取exe中的的版本信息
获取的版本信息需要在RC文件中定义,如下:编译的可执行文件右键文件属性可查看到,如下:代码:#include <Windows.h>#include <WinVer.h>#include <tchar.h>#include <afxstr.h>#pragma comment(lib,"Version.lib")/** * \brief 获取制定可执行程序的版本信息数据 格式:同在rc中的VS_VERSION_IN..原创 2020-05-16 09:14:42 · 2771 阅读 · 0 评论 -
COM的IPicture转Gdiplus::Image
直接代码Gdiplus::Image IPicture2Image( IPicture* pPicture ){ ASSERT(NULL != pPicture); if( NULL == pPicture ) { return NULL; } CDC dcScreen; dcScreen.Attach(::GetDC(NULL)); // create memory d...原创 2020-05-08 00:56:09 · 334 阅读 · 0 评论 -
最简单地解决:error C2660: “Gdiplus::GdiplusBase::operator new”: 函数不接受 3 个参数
这是由于MFC在debug模式定义了重载的调试new。但Gdiplus并不支持MFC的定义。最佳解决:使用全局的new。例子:注意new前的全局作用域运算符::Gdiplus::Bitmap* pBitmap = ::new Gdiplus::Bitmap(bmp.bmWidth, bmp.bmHeight, PixelFormat32bppPARGB);其他解决:临时取...原创 2020-05-08 00:07:15 · 1198 阅读 · 0 评论 -
MFC消息处理中弹出MessageBox(信息窗口)报错:参数错误
原因分析:1、排除Win32 导致的错误,系统API不使用异常而是使用返回值和GetLastError联合检测和报告错误。这种方式不会提示MessageBox这种重量级的窗口错误。2、由于MFC的类普遍使用了异常抛出与捕获,因此肯定是某个地方触发了MFC的异常机制。因此,可以确定是使用MFC的某些类用法不当导致的错误。逐一排查新增代码,找到错误。本工程中导致此错误的原因在于以下代码...原创 2020-05-06 16:05:54 · 3354 阅读 · 0 评论 -
Windows支持进程间的消息通信:注册消息(register messages)
WM_*和WM_COPYDATA都需要提前获取目标窗口的句柄)。注册消息:可以不指定目标窗口句柄。发送方和接收方都需要做的:// 1、定义注册消息:参数字符串必须在系统内保证唯一static const UINT WM_CHECK_ITS_ME = RegisterWindowMessage(_T("##DUIVISION_APPLICATION##"));// 2、定...原创 2020-04-03 09:05:34 · 1117 阅读 · 0 评论 -
VC 获取当前函数的调用堆栈
直接上代码吧:#include <DbgHelp.h>#pragma comment(lib,"Dbghelp.lib")void ShowTraceStack( ){ enum { MAX_STACK_FRAMES = 16 }; void* arrBackTrace[MAX_STACK_FRAMES] = { 0 }; CString strSta...原创 2020-04-02 16:45:43 · 1272 阅读 · 0 评论 -
OutputDebugString不在DebugView中显示
此函数的功能:发送一个字符串到当前应用程序的调试器中。因此,它不输出有以下几种情况:1、当前的应用程序已经有调试器了,比如在Visual Studio中运行的程序,Vistual Studio时调试器,此时输出在Output窗口。2、不通过Visual Studio 运行的程序,DebugView的Computer菜单下要选择Local,同时Capture菜单下要选择启用捕获。...原创 2020-03-30 11:27:25 · 2566 阅读 · 0 评论 -
解决:0x00007FFF02B86981 (kernel32.dll)处(位于 .exe 中)引发的异常: 0xC0000005: 读取位置 0x00007FFEC1C722A8 时发生访问冲突。
此异常定位在断点的语句为 if (!_CrtIsValidPointer(pHead->szFileName, 1, FALSE) || IsBadReadPtr(pHead->szFileName,1))容易发现具体错误为此语句的pHead ->szFileName为异常的内存,导致无法访问。解决:执行到此语句通常为退出main函数之后出现,由此推断是全局...原创 2020-03-27 17:45:43 · 12678 阅读 · 0 评论 -
制作Windows游戏外挂几个有用的函数
除了很熟悉的跨进程注入(远程注入)等技术外。记录一些其它的小函数。1、mouse_event/key_event ( SendInput ) 按键/鼠标模拟(鼠标/键盘按键精灵)、void mouse_event( DWORD dwFlags, //具体的按键动作,如:左键、右键等。 DWORD dx, // x坐标 DWORD dy...原创 2020-01-05 17:38:15 · 1050 阅读 · 0 评论 -
STM_SETIMAGE 消息或CStatic::SetBitmap(HBITMAP hBitmap)导致的GDI资源泄露
STM_SETIMAGE或CStatic::SetBitmap(HBITMAP hBitmap)返回的是先前的资源句柄,同时深拷贝一份当前的(参数传入的)资源句柄。解决:win32HBITMAP hOldBmp = (HBITMAP)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap);if( NULL...原创 2019-12-27 10:55:22 · 664 阅读 · 1 评论 -
MFC拖入Custom control后,CDialog创建失败,DoMoel不显示
原因:创建对话框时,MFC根据控件类去查找控件代码。默认class属性是空:此时,加入一个类名,如此时,再执行:CXXXDialog dlg;dlg.DoModel();即正常执行...原创 2019-08-29 14:43:58 · 1364 阅读 · 1 评论 -
VC++ 触屏右键功能不管用
正常功能:长按住某个位置,出现一个圆圈,代表激活右键。但是VC程序没有这个圆圈,右键也不激活。解决办法:在需要响应右键的HWND的消息处理中增加:case WM_TABLET_QUERYSYSTEMGESTURESTATUS:{ //什么都不做,直接返回 return 0;}如果是MFC程序,增加消息映射:ON_MESSAGE(WM_TABLET_QUERYS...原创 2019-10-11 15:23:07 · 499 阅读 · 0 评论 -
DeleteFile对最近关闭的文件操作失败。GetLastError()==5
Windows is notorious for this issue. SQLite handles the problem by retrying the delete operation every 100 milliseconds up to a maximum number.I believe if you are sure that you have no open handles...翻译 2019-04-18 08:30:27 · 1571 阅读 · 0 评论 -
C/C++释放内存大小,与内存监控得到的大小不同的原因
If you are viewing Task Manager size, it will give you the size of the process. If there is no "pressure" (your system has plenty of memory available, and no process is being starved), it makes no se...转载 2018-11-05 15:57:43 · 351 阅读 · 0 评论 -
LED液晶屏数字显示MFC实现
添加对话框变量: CStatic m_wndDigitNumber;将此变量修改为: CDigiStatic m_wndDigitNumber;在OnInitDialog中添加: m_wndDigitNumber.SetColor(RGB(125,125,125),RGB(0,255,0) ); m_wndDigitNumber.SetBkColor(RGB(255...原创 2019-08-09 11:40:57 · 1438 阅读 · 0 评论 -
Windows的manifest Enabling Visual Styles
详情:https://docs.microsoft.com/zh-cn/windows/win32/controls/cookbook-overview原创 2019-07-16 13:01:35 · 248 阅读 · 0 评论 -
COM组件引用计数详细规则
com组件将维护一个称作是引用计数的数值。当客户从组件取得一个接口时,此引用计数值将增1。当客户使用完某个接口后,组件的引用计数值将减1.当引用计数值为0时,组件即可将自己从内存中删除。 为什么要选择为每一个接口单独维护一个引用计数而不是针对整个组件维护引用计数呢?主要有两个原因:一是使程序调试更为方便;另外一个原因是支持资源的按需获取。1程序调试:假设...转载 2018-12-10 09:17:06 · 1097 阅读 · 0 评论 -
32位程序64位编译时提示 GWL_WNDPROC 未定义,GWL_USERDATA未定义
<WinUser.h> 中:/* * Window field offsets for GetWindowLong() */#define GWL_WNDPROC (-4)...#ifdef _WIN64#undef GWL_WNDPROC#undef GWL_HINSTANCE#undef GWL_HWNDPARENT#undef GWL_...原创 2018-11-22 21:53:35 · 11220 阅读 · 2 评论 -
VS基于32位工程生成64位配置时,【未能创建此平台,因为已存在同名的解决方案平台】
问题截屏:问题截屏解决方案:1、选择解决的平台配置下的--》编辑2、选择移除3、此时再新建即可原创 2018-11-22 20:54:04 · 2289 阅读 · 0 评论 -
vs环境配置中3b的含义
VS工程——属性——配置属性——调试——环境中设置为PATH=$(QTDIR)\bin%3b$(PATH)其中%3b是分号(;)的16进制编码。原创 2018-11-21 11:41:22 · 2659 阅读 · 0 评论 -
如何检查,可执行程序,是debug模式?还是release模式?
Generally no.There hasn't a reliable way to do this with a native DLL file.Even you would be able to check what versions of system libraries a program is linked with and it's the debug version, c...原创 2018-11-03 13:22:22 · 2637 阅读 · 0 评论 -
TCHAR in VC++
/* String functions */_tcscpy_s,_tcscat_s,_tcslen, _tcsnlen,_tcschr,_tcsdup,_tprintf, _tprintf_s, _stprintf, _stprintf_s /* String conversion functions */// Convert string to number...转载 2018-09-28 09:50:25 · 297 阅读 · 0 评论 -
MFC/WIN32等窗口子系统应用程序,加入控制台窗口.
1.生成后事件 ——>命令行:editbin /subsystem:console $(OutDir)$(ProjectName).exe2.void CreateConsole( ){ AllocConsole(); HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); int hCrt = _ope...原创 2018-09-27 11:27:37 · 507 阅读 · 0 评论 -
Windows下的snprintf实现
_snprintf_s不会再最后加入\0,如果溢出返回-1.注意:微软在visual studio 2015中终于实现了snprintf函数。在以前的visual studio中,参考实现如下:#if defined(_MSC_VER) && _MSC_VER < 1900int vsnprintf(char *outBuf, size_t size, con...翻译 2018-09-06 21:30:36 · 1490 阅读 · 0 评论 -
VS启动调试(F5)报错:the specified file is an unrecognized or unsupported binary format
解决:解决方案中的启动项的类型必须为Application(.exe) 应用程序(.exe)原创 2018-12-27 09:15:44 · 1854 阅读 · 1 评论 -
CAD二次开发加载自定义模块程序流程
(1)启动CAD:acad.exe 脚本1脚本1中通常包含命令内容和顺序(1)使用CAD自身命令初始化: 初始化CAD的窗口内容和风格,如但文档试图;初始化缩放比例等等;(2)arxload 自定义.arx. 在这个ARX中,通常定义了一些控制逻辑型的函数,为接下来真正加载(为了保证程序良好的可扩展性);这些函数通常由LISP脚本调用获取控制状态。(3)load lisp...原创 2018-12-21 14:52:38 · 2350 阅读 · 0 评论 -
CWorkBooks、CWorkBook、CWorkSheets、CWorkSheet、CRange简介以及导入MFC工程
操作Excel对我们来说是常有的事,有时经常需要从Excel中导入数据,或者把报表保存到Excel中去;但是对于Excel编程来说肯定少不了要遇到六个最基本的类(CApplication、CWorkBook、CWorkBooks、CWorkSheet、CWorkSheets、CRange),下面我们来一一介绍一下这五个类,相信你掌握了这五个类后你对于Excel编程也会熟练很多。话不多说,我们一一来...转载 2018-12-10 18:15:12 · 2442 阅读 · 0 评论 -
MFC 拖入rich edit2 控件,程序崩溃。
在App类的InitInstance()中加入 AfxInitRichEdit(); //rich edit控件 AfxInitRichEdit2(); //rich edit2 控件原创 2019-06-27 12:17:38 · 547 阅读 · 0 评论 -
逼近Windows限制:单个进程最大线&系统最大进程
首先讨论线程限制,因为每个活动进程至少有一个线程(终止的进程,但是由另一个进程拥有的句柄保持引用),所以进程的限制直接受到限制线程的上限的影响。 与一些UNIX变体不同,Windows中的大多数资源没有编译到操作系统中的固定上限,而是根据我已经介绍过的基本操作系统资源来推测它们的临界值。例如,进程和线程需要物理内存,虚拟内存,内存池。所以可以创建的进程或线程的数量,...翻译 2019-07-02 23:37:35 · 8309 阅读 · 0 评论 -
win32中CreateBitmap的参数-颜色平面
微软:Current number of color planes used in the video display. A color plane is another way to represent pixel colors; instead of assigning a single RGB value to each a pixel, color planes separate th...翻译 2019-06-20 10:49:52 · 1353 阅读 · 0 评论 -
Serial comms using WriteFile locks up.
The problem revealed: "There are two interesting side effects of SetCommMask and WaitCommEvent. First, if the communications port is open for nonoverlapped operation, WaitCommEvent will be blocked unt...转载 2019-05-24 06:05:00 · 177 阅读 · 0 评论 -
MSDN上关于COM中excel内容的相关链接
虽然读写excel的方案有很多种,但维护的代码用的是COM实现的。MSDN中没有C++相关的API说明,相关的帮助只能参考.net的帮助。等过了这阵子,做一个CHM文档,以备后用。链接:https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel._application?view=excel-pi...原创 2018-12-12 13:56:27 · 300 阅读 · 0 评论