当前位置: 首页 > news >正文

问题解决方案之VC++

文|Seraph

本文档主要记录VC编程过程中,经常遇到的一些问题,以供大家参考。

一、开发多文档形式在初始化时,使其框架以及视图最大化
  1. 框架最大化为在应用程序类的初始化函数中添加如下代码:
BOOL CMDIAppDemoApp::InitInstance(){......pMainFrame->ShowWindow(SW_SHOWMAXIMIZED);// pMainFrame->ShowWindow(m_nCmdShow);pMainFrame->UpdateWindow();......}
  1. 视图最大化在子窗口类中做如下操作:
//添加CChildFrame类的ActivateFrame虚函数voidCChildFrame::ActivateFrame(intnCmdShow){nCmdShow=SW_MAXIMIZE;//添加CMDIChildWnd::ActivateFrame(nCmdShow);}
二、CString 与 char 、BYTE之间的转换(vs05之后要先将CString转为CStringA)
  1. CString转char
  • 通用(借CStringA做中转)
CString m_cstr;m_cstr="adc";CStringA m_cstrA;m_cstrA=m_cstr;char*lp;lp=m_cstrA.GetBuffer(m_cstrA.GetLength());
  • 分类型转化方式:

多字节字符集情况下

char *s=(LPSTR)(LPCTSTR)str;

Unicode字符集情况下

int n = str.GetLength(); //按字符计算,str的长度 //按Byte计算str长度 int len = WideCharToMultiByte(CP_ACP,0,str,n,NULL,0,NULL,NULL); //按字节为单位 char *pChStr1 = new char[len+1]; //宽字节转换为多字节编码 WideCharToMultiByte(CP_ACP,0,str,n,pChStr1,len,NULL,NULL); pChStr1[len] = '\0';//不要忽略末尾结束标志
  • T2A,W2A
USES_CONVERSION;//声明标示符//调用函数,T2A和W2A均支持ATL和MFC中字符转换//char *pChStr2 = T2A(str);char*pChStr2=W2A(str);//也可以实现转换
  1. CString转BYTE
CString m_cstrw; m_cstrw="123";CStringA m_cstr;m_cstr=m_cstrw;BYTE*m_byte;m_byte=newBYTE[100];m_byte=(BYTE*)m_cstr.GetBuffer(m_cstr.GetLength());//cstring转BYTE
  1. char与BYTE转换
    强制转换就行
三、release编译下和直接运行EXE的结果不用
  1. 动态库资源缺失
  2. 文件访问路径错误
  3. 优化问题
四、VC线程退出的方法
  1. 循环进入标志使用一个全局判断标志,如定义一个g_bExitThread
    **缺点:**如果线程执行时间过长,会导致,执行g_bExitThread=0;语句后,立即执行后面的函数,不能等待线程结束
    当然,你可以使用sleep来保证线程结束后再执行后面语句,但是这种效率比较低,时间也不是很好把控。再者CPU时间是分片的,不能保证全部时钟周期都用来运行线程,所以也就无法准确地估计线程最长运行时间。

  2. 通过WaitForSingleObject来获取线程状态,如果线程退出,执行后面的语句。

  3. 大部分多线程情况,如果线程没有退出,会导致程序退出的时候崩溃,所以我们希望能管理全部线程退出的情况。防止程序因为有线程没有退出而出现崩溃的情况。
    增加一个ExitApplicationThread线程函数,当程序退出时调用,该函数的作用是检测启动的线程是否退出

  4. TerminateThread(ExitThread)终止线程,但是不推荐,因为线程结束时,只能清理操作系统资源,不能清理C++资源(如C++类对象),我们无法确认被结束的线程占用了哪些资源,或许这些资源其他线程正在等待。
    所以说,不清理退出,不仅是奢侈的,也是很危险的操作。

五、生成拥有管理员权限的执行文件
  1. (项目右键—属性—连接器—清单文件—uac执行级别 选择requireAdministrator )中文版
  2. (project->property->Configuration Properties->Linker->Manifest File->UAC Execution Level 选择requireAdministrator)英文版
    重新编译 这样你的程序直接运行就拥有管理员权限了。
六、字节顺对齐
  1. (project->property->Configuration Properties->Code Generation->Struct Member Alignment)
    可以设置结构体多少字节对齐。
  2. 注意此字节对齐仅适用于本工程产生的执行文件,如调用的DLL默认为其它字节对齐,可能会使调用接口时获取结构体数据偏移对不齐。

我已经没有时间去对我不感兴趣的事情再产生兴趣。------《局外人》

http://www.jsqmd.com/news/1282315/

相关文章:

  • 半导体抛售潮下,SK海力士股价暴跌,AI芯片上涨行情能否持续引质疑?
  • 5分钟实现网页视频自由下载:VideoDownloadHelper完整技术解析与实战指南
  • 济南名包回收哪家店出价高?成色/附件/热门款对回收价格的影响全解析 - 二奢分享官
  • 广州夏令营:军博营地专业严谨 - 17728098551
  • 物联网设备初级电池寿命延长技术与NBM7100A方案解析
  • 2026年广东口碑好的精密cnc加工工厂推荐:谁解精度痛点? - 变量人生001
  • 滨州环保设备水帘厂家哪家好?2026避坑指南:4个坑+5条硬标准,帮你绕开90%的坑 - GEO99
  • 为什么你学了AI却用不起来?揭秘普通人落地失败的3个隐形陷阱(附避坑清单)
  • 龍魂系统 · 三国谋士多维度推演报告 基于《三国志》正史数据 | 非演义美化 | 非文学滤镜
  • Plus one (66)
  • Avidemux2:开源视频编辑器的完整指南与专业技巧
  • TPIC7710EVM评估模块:汽车电子驻车制动ASIC硬件设计与GUI调试实战
  • VS静态库调用问题
  • TPIC7710评估板实战指南:从硬件解析到软件调试的完整开发流程
  • SpringBoot+Vue构建智慧图书管理系统全解析
  • 2026年广东专业的精密cnc加工源头工厂排行榜 - 变量人生001
  • 从零上手 Hermes Agent:构建可成长AI助手的完整实践指南
  • 原生js多组星级评价
  • 高性价比长续航轿车推荐 - 资讯在线
  • 如何快速找到并安装最适合的用户脚本:Greasy Fork实用指南
  • AI水印不是加个logo!揭秘频域嵌入、神经指纹与语义水印三大范式性能对比(含FID/PSNR/Breaking Rate实测数据)
  • 【JAVA毕业设计】基于 SpringBoot+Vue 的面向高校师生的学习交流及资源共享服务平台 轻量化校园互助社区与教学资料共享管理系统(源码+文档+远程调试,全bao定制等)
  • 如何免费快速下载网易云和QQ音乐歌词?完整指南
  • MySQL 表中的增删改查
  • 编程 MD(d)、MT(d)编译选项的区别
  • 《龍魂·曲速引擎推演舱:把广义相对论做成3D交互页,我是用 Kimi 这么干的》
  • OpenModScan:免费开源的工业Modbus调试工具完整指南
  • 突发!AG KIT反重力优先智能体工程套件,功能特性与使用指南全揭秘
  • 相似三角形
  • 年轻人的代步车推荐 - 资讯在线