
VC++
文章平均质量分 51
宇龍_
有些白嫖党连个赞都不点甚至直接抄走了说原创,新发布的都写到专栏里吧,哎。
私聊给群号,可进Q群咨询问题。
展开
-
windbg分析进程卡死、CPU高占用
本文重点讲述的是通过windbg分析进程卡死、CPU占用过高的问题,在日常的开发过程中,,那么在这种情况下我们该如何找出程序是在哪个环节或函数处卡主的?本文正是为了解决此问题。原创 2022-07-31 13:50:21 · 2529 阅读 · 0 评论 -
win32创建窗口及按钮(轻量级)
win32,窗口,按钮原创 2022-06-30 22:42:48 · 2798 阅读 · 0 评论 -
互斥对象与临界区的区别
互斥对象,临界区,Windows原创 2022-06-14 23:16:32 · 197 阅读 · 0 评论 -
Windows编程——读写锁
读写锁,线程同步,Windows原创 2022-06-13 23:18:25 · 1661 阅读 · 2 评论 -
WinDbg分析dump文件
调试能力可以说是最重要,尤其对于C/C++程序员而言,更是如此!当我们从测试那里拿到dump文件后,需要将对应的二进制文件(exe、dll等放到和出了问题的那台电脑同样的路径下)1、用WinDbg打开dump文件2、设置符号路径(生成二进制文件时对应的PDB文件,版本要一致!多个二进制文件的pdb最好生在同一目录):3、设置源码路径(项目的solution路径,多个项目可以加到一个solution里面):4、执行命令: !analyze -v此时WinD.原创 2022-05-17 23:25:02 · 7673 阅读 · 1 评论 -
通过进程PID获取可执行文件全路径,提取路径中的文件名,提取文件名后缀、提取全路径中的目录、枚举进程加载模块dll
需要用到如下API32位的程序调用此API同样能获取到64位进程的可执行文件路径。下面是微软在文档中的说明,由于该API很简单就不再复述了hProcess [in]A handle to the process. This handle must be created with the PROCESS_QUERY_INFORMATION or PROCESS_QUERY_LIMITED_INFORMATION access right. For more information, see Proces原创 2022-05-08 16:04:32 · 2105 阅读 · 0 评论 -
VC下Unicode和ANSI互转,CStringW和std::string互转
前言众所周知,CString有两种,分别是使用ANSI编码的CStringA和使用Unicode编码的CStringW,其中CStringA和std::string的转化非常简单,毕竟都是使用的ANSI编码,这里就不谈了,只谈CStringW和std::string的转化。正文微软有提供宽窄字节转换的API函数,但稍显麻烦了一些,这里使用的是微软在ATL中提供的几个宏,使用非常的简单。常用的有如下转换宏:1、W2A和A2W2、CW2A和CA2W一、W2A和A2W的使用方法原创 2022-05-07 22:53:29 · 1152 阅读 · 0 评论 -
CString的GetBuffer和ReleaseBuffer使用说明
先看一段代码:#include <atlstr.h>//测试CStringint main(int argc, _TCHAR* argv[]){ CStringA strTemp = "555"; //这里输出为3,不包含结束符 printf("str=%s,len=%d\n",strTemp.GetBuffer(),strTemp.GetLength()); LPSTR lpStr = strTemp.GetBuffer(10); //这里输出为3,因为对GetBu原创 2022-05-06 22:34:32 · 784 阅读 · 0 评论 -
Windows编程之事件对象(2)
在Windows编程之事件对象(1)的基础之上再实现一个例子:两个进程交替打印0和1,这里用到了另个一APIHANDLE WINAPI OpenEvent( __in DWORD dwDesiredAccess, __in BOOL bInheritHandle, __in LPCTSTR lpName);参数dwDesiredAccess [in]对事件对象的访问标志。如果指定对象的安全描述符不允许调用进程请求访问,则函数失败。bInheritHandle[.原创 2022-04-14 23:36:43 · 393 阅读 · 0 评论 -
Windows编程之事件对象(1)
事件对象是Windows的内核对象,常见用途:1、用于线程同步2、用于保证应用程序单实例运行。一、创建事件对象HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes,// 安全属性 BOOL bManualReset,// 复位方式 BOOL bInitialState,// 初始状态 LPCTSTR lpName // 对象名称);第一个参数 lpEventAttributes 为指向安全属...原创 2022-04-14 09:00:00 · 658 阅读 · 0 评论 -
COM编程入门1-创建项目并编写接口
以下项目的构建与开发使用的是vs2010,与vs2015、2017区别不大1、创建ATL项目并命名为test12、应用程序类型选择动态链接库3、右键项目属性添加类并选择ATL简单对象,命名为Func4、选择自定义接口5、 按Ctrl+Shift+C 切换到类视图,右键IFunc类并添加方法,先编写一个整数求和的接口Add该接口一共三个参数,[in LONG n1,in LONG n2,out retval LONG* p...原创 2022-03-20 21:49:25 · 1275 阅读 · 0 评论 -
duilib实战1-模仿百度网盘登录界面
侵权删,未经允许禁止转载!前言: 刚上手duilib,还不太熟悉,而且没有官方文档,所以写几个实战项目来学习并巩固一下。使用或实现的部分技术细节: 1、主窗体的边框 2、默认字体,控件默认属性的标签定义 3、CTextUI控件的简配html功能,包括a、c标签的使用(其中当align处于center时,点击超链接有bug) 4、使用到的控件标签主要有Button,Text,Control,RichEdit,Edit,CheckBox,ComboBox等 ...原创 2022-03-18 15:07:09 · 895 阅读 · 0 评论 -
vs2015附加manifest文件
事由是通过GetVersionEx获取Win10版本号,获取出来是6.2,显然是错误的,需要附加一个manifest文件。manifest文件内容如下,文件为UTF8编码:<?xml version="1.0" encoding="UTF-8"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <compatibility xmlns="urn:schema原创 2021-01-15 10:26:51 · 1809 阅读 · 0 评论 -
调用OpenProcess失败解决方案
服务程序,程序的创建者为SYSTEM用户;非SYSTEM用户调用OpenProcess访问该服务程序时,调用失败,GetLastError返回5调用以下函数提权:void enableDebugPriv(){ HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES |原创 2020-08-28 10:39:41 · 3353 阅读 · 1 评论 -
MFC窗口最大化导致遮住任务栏的问题
添加WM_GETMINMAXINFO消息处理函数,函数体如下:void CTabDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI){ // TODO: Add your message handler lpMMI-> ptMaxSize.y = GetSystemMetrics(SM_CYFULLSCREEN)+GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CYDLGFRAME); CDial原创 2020-07-17 16:24:42 · 906 阅读 · 0 评论 -
通过SendMessage向一个窗口的子控件发送消息
比如向一个MFC窗口的ActiveX控件发送消息,假设窗口的标题是"abcd",ActiveX控件的标题是"fff"则代码如下: HWND hWnd = ::FindWindow(NULL,"abcd"); if(hWnd) { hWnd = ::FindWindowEx(hWnd,NULL,NULL,L"fff"); if(hWnd) ::SendMessage(hWnd,WM_TEST,0,0); }原创 2020-06-23 16:10:46 · 1006 阅读 · 0 评论 -
wchar_t *和char * 相互转化
转载了一个简答粗暴的方法:std::wstring CharToWchar(const char* c, size_t m_encode = CP_ACP){ std::wstring str; int len = MultiByteToWideChar(m_encode, 0, c, strlen(c), NULL, 0); wchar_t* m_wchar = new wchar_t[len + 1]; MultiByteToWideChar(m_encode, 0, c, strlen原创 2020-06-23 15:44:24 · 1716 阅读 · 0 评论 -
WM_COPYDATA 注意事项
这里转载了一位同学对WM_COPYDATA的总结,写的不错,我基本没有修改。COPYDATASTRUCT有三个成员变量,如下所示:typedef struct tagCOPYDATASTRUCT { ULONG_PTR dwData; DWORD cbData; PVOID lpData;} COPYDATASTRUCT, *PCOPYDATASTRUCT;注意:1、dwData为自定义数据,按照自己习惯设置就好,不影响对象的传输;2、cbDat.转载 2020-06-23 15:40:10 · 886 阅读 · 0 评论 -
无法接收SendMessage消息
窗口向另一个进程的窗口发送消息,但那个窗口始终收不到消息,虽然已经通过FindWindow找到了句柄,最后发现接收消息窗口的进程是管理员权限运行,发送窗口不是,二者均以管理员方式运行后即可正常通信。...原创 2020-06-23 15:19:16 · 2327 阅读 · 0 评论 -
VC程序运行后删除自身
程序执行完再执行该函数即可:void DeleteSelf(){ WCHAR szCommandLine[MAX_PATH + 10]; memset(szCommandLine,0,sizeof(szCommandLine)); swprintf(szCommandLine, L"/c %s", L"ping www.baidu.com&del /f *.exe");//执行ping来延迟删除 ShellExecute(NULL, L"open", L"cmd.e原创 2020-05-27 11:08:21 · 452 阅读 · 0 评论 -
线程的消息循环举例
线程的消息循环如下:DWORD WINAPI ThreadProc(LPVOID lpParam){ if (!lpParam) return 0; HWND hWnd = (HWND)(lpParam); bool bRet = false; MSG msg; while ((bRet = GetMessage(&msg, ...原创 2020-03-26 20:52:03 · 534 阅读 · 0 评论 -
VC/MFC 强制结束当前进程
最近接手一个MFC老项目,Bug太多,主线程退出的时候,也不管子线程死活,直接退出,导致子线程又去访问那些被释放的资源,结果程序无法关闭,或者导致进程在后台驻留了。这里提供一种简单粗暴的方法://强行结束自己void TerminateApp(){ HANDLE hself = GetCurrentProcess(); TerminateProcess(hself, 0...原创 2020-03-14 10:27:25 · 2694 阅读 · 0 评论 -
windows多线程编程-事件详解
不得不说官方的例子写的是真的好,比网上乱七八糟代码好太多了,以后参考代码都以MSDN为主。先介绍一下CreateEvent这个函数的各个参数,这是重点HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes,// 安全属性 BOOL bManualReset,// 复位方式 BOOL bInitialS...原创 2020-01-11 09:56:07 · 515 阅读 · 1 评论 -
Windows下使用互斥对象的注意事项
相关API函数介绍HANDLECreateMutex( LPSECURITY_ATTRIBUTESlpMutexAttributes,//指向安全属性的指针 BOOLbInitialOwner,//初始化互斥对象的所有者,即创建的线程是否直接拥有互斥锁 LPCTSTRlpName//指向互斥对象名的指针);第三个参数,lpName是指定这把锁的名字. ...原创 2019-10-13 11:47:28 · 8688 阅读 · 0 评论