问题解决方案之VC++

发布时间:2026/7/28 18:28:11
问题解决方案之VC++ 文|Seraph本文档主要记录VC编程过程中经常遇到的一些问题以供大家参考。一、开发多文档形式在初始化时使其框架以及视图最大化框架最大化为在应用程序类的初始化函数中添加如下代码BOOL CMDIAppDemoApp::InitInstance(){......pMainFrame-ShowWindow(SW_SHOWMAXIMIZED);// pMainFrame-ShowWindow(m_nCmdShow);pMainFrame-UpdateWindow();......}视图最大化在子窗口类中做如下操作//添加CChildFrame类的ActivateFrame虚函数voidCChildFrame::ActivateFrame(intnCmdShow){nCmdShowSW_MAXIMIZE;//添加CMDIChildWnd::ActivateFrame(nCmdShow);}二、CString 与 char 、BYTE之间的转换vs05之后要先将CString转为CStringA)CString转char通用借CStringA做中转CString m_cstr;m_cstradc;CStringA m_cstrA;m_cstrAm_cstr;char*lp;lpm_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[len1]; //宽字节转换为多字节编码 WideCharToMultiByte(CP_ACP,0,str,n,pChStr1,len,NULL,NULL); pChStr1[len] \0;//不要忽略末尾结束标志T2A,W2AUSES_CONVERSION;//声明标示符//调用函数T2A和W2A均支持ATL和MFC中字符转换//char *pChStr2 T2A(str);char*pChStr2W2A(str);//也可以实现转换CString转BYTECString m_cstrw m_cstrw123;CStringA m_cstr;m_cstrm_cstrw;BYTE*m_byte;m_bytenewBYTE[100];m_byte(BYTE*)m_cstr.GetBuffer(m_cstr.GetLength());//cstring转BYTEchar与BYTE转换强制转换就行三、release编译下和直接运行EXE的结果不用动态库资源缺失文件访问路径错误优化问题四、VC线程退出的方法循环进入标志使用一个全局判断标志如定义一个g_bExitThread**缺点**如果线程执行时间过长会导致执行g_bExitThread0;语句后立即执行后面的函数不能等待线程结束。当然你可以使用sleep来保证线程结束后再执行后面语句但是这种效率比较低时间也不是很好把控。再者CPU时间是分片的不能保证全部时钟周期都用来运行线程所以也就无法准确地估计线程最长运行时间。通过WaitForSingleObject来获取线程状态如果线程退出执行后面的语句。大部分多线程情况如果线程没有退出会导致程序退出的时候崩溃所以我们希望能管理全部线程退出的情况。防止程序因为有线程没有退出而出现崩溃的情况。增加一个ExitApplicationThread线程函数当程序退出时调用该函数的作用是检测启动的线程是否退出TerminateThreadExitThread终止线程但是不推荐因为线程结束时只能清理操作系统资源不能清理C资源如C类对象我们无法确认被结束的线程占用了哪些资源或许这些资源其他线程正在等待。所以说不清理退出不仅是奢侈的也是很危险的操作。五、生成拥有管理员权限的执行文件(项目右键—属性—连接器—清单文件—uac执行级别 选择requireAdministrator )中文版(project-property-Configuration Properties-Linker-Manifest File-UAC Execution Level 选择requireAdministrator)英文版重新编译 这样你的程序直接运行就拥有管理员权限了。六、字节顺对齐project-property-Configuration Properties-Code Generation-Struct Member Alignment可以设置结构体多少字节对齐。注意此字节对齐仅适用于本工程产生的执行文件如调用的DLL默认为其它字节对齐可能会使调用接口时获取结构体数据偏移对不齐。我已经没有时间去对我不感兴趣的事情再产生兴趣。------《局外人》