Visual C++
机器视觉001
熟悉Visual C++、HALCON、机器视觉;10 年开发经验!
展开
-
MFC:CScrollBar与CSliderCtrl
CScrollBar与CSliderCtrl区别转载 2023-01-16 10:59:48 · 844 阅读 · 0 评论 -
类的静态成员函数带来了什么好处,应该在什么时候使用?
类的静态成员函数带来了什么好处,应该在什么时候使用?静态成员函数主要为了调用方便,不需要生成对象就能调用。比如:class X{public: void MethodA(); static void MethodB();}此时MethodB可以直接调用,X::MethodB();MethodA必须先生成类对象才能调用,X x; x.MethodA();函数的行为对所有派生类都一致时,可以声明为静态。静态成员函数的作用基本上相当于:一个带有命名空间的全局函数。转载 2021-11-13 11:27:14 · 1642 阅读 · 0 评论 -
for循环中++i 和 i++ 的区别
for循环中++i 和 i++ 的区别for (语句1; 语句2; 语句3){ 被执行的代码块} 根据for循环的语法定义 ++i 和 i++的结果是一样的,都要等代码块执行完毕才能执行语句3,但是性能是不同的。在大量数据的时候++i的性能要比i++的性能好原因:i++由于是在使用当前值之后再+1,所以需要一个临时的变量来转存。而++i则是在直接+1,省去了对内存的操作的环节,相对而言能够提高性能....原创 2021-09-15 10:01:32 · 771 阅读 · 0 评论 -
Windows系统System32目录的访问权限问题
在Windows 64位系统上运行32位程序往System32拷贝文件时,系统默认重定向到对应的SysWOW64目录。原创 2021-06-25 18:22:43 · 2363 阅读 · 0 评论 -
All xxx functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
All xxx functions were compiled because no usable IPDB/IOBJ from previous compilation was found.解决办法:原创 2021-03-20 22:49:51 · 2838 阅读 · 0 评论 -
如何解决string转CString乱码问题?
如何解决string转CString乱码问题?string str = “hello”;CString cstr = (CString)str.c_str();原创 2021-03-16 22:48:26 · 833 阅读 · 0 评论 -
Qt:相对路径说明
Qt:相对路径说明相对路径刚接触文件操作时,应该都写过这种小程序:#include <stdio.h>int main(){ FILE * pFile = fopen ("data.txt" , "r"); if (pFile == NULL) { perror ("Error opening file"); } else { //do something fclose (pFile); } return 0;转载 2020-11-01 21:21:09 · 6948 阅读 · 1 评论 -
32位应用程序如何使用大于2GB的内存?
32位应用程序如何使用大于2GB的内存?不管是在 32 位 Windows 还是在 64 位 Windows,32 位应用程序都只能使用最大 2GB 的内存,这是我们司空见惯的一个设定。但其实 Windows 提供了一些方法让我们打破这样的设定,使程序使用大于 2GB 的内存。为什么 32 位程序只能使用最大 2GB 内存?32 位寻址空间只有 4GB 大小,于是 32 位应用程序(进程)最大只能用到 4GB 的内存。然而,除了应用程序本身要用内存,操作系统内核也需要使用。应用程序使用的内存空间转载 2020-11-01 15:33:28 · 6549 阅读 · 0 评论 -
C语言内存泄露很严重,如何应对?
C语言内存泄露很严重,如何应对?1.前言最近部门不同产品接连出现内存泄漏导致的网上问题,具体表现为单板在现网运行数月以后,因为内存耗尽而导致单板复位现象。一方面,内存泄漏问题属于低级错误,此类问题遗漏到现网,影响很坏;另一方面,由于内存泄漏问题很可能导致单板运行固定时间以后就复位,只能通过批量升级才能解决,实际影响也很恶劣。同时,接连出现此类问题,尤其是其中一例问题还是我们老员工修改引入,说明我们不少员工对内存泄漏问题认识还是不够深刻的。本文通过介绍内存泄漏问题原理及检视方法,希望后续能够从编...转载 2020-11-01 12:03:52 · 378 阅读 · 0 评论 -
MFC控件实时更新
MFC控件实时更新MFC很多情况下需要更新控件,也就是调用UpdateData(FALSE);但是如果是在循环中调用该函数,会导致没有时间来刷新界面,消息得不到相应,从外部看来,似乎整个循环只执行了一次UpdateData(FALSE);如下面的例子:for(int i = 0;i < m; i++) { int j = i+1; UpdateData(FALSE); }这种写法会导致界面没有时间更新。其实在代码上添加一点东西就可以实现实时刷新。添加代码原创 2020-08-12 21:39:20 · 1665 阅读 · 0 评论 -
SHFormatDrive格式化硬盘
SHFormatDrive格式化硬盘从实际应用的角度看,从Windows 9X到Windows NT都应该提供这个FormatDisk函数,否则怎么实现资源管理器窗口的磁盘格式化呢?笔者通过仔细查找发现,Windows 确实提供了这样一个函数,尽管文档资料没有注明,但是如果我们使用View Dependencies打开Shell2.dll,就会发现这个函数。它就是SHFormatDrive,编译连接到Shell32.lib。尽管通过平台的SDK文档和SHELLAPI.H文件并...原创 2020-07-13 19:19:42 · 700 阅读 · 0 评论 -
C++ 复制一个文件夹下的所有文件到另一个文件夹
C++ 复制一个文件夹下的所有文件到另一个文件夹#include "Shellapi.h"#include "tchar.h"// 告诉编译器在编译形成的.obj文件和.exe文件中添加一条信息// 使得连链接器在链接库时去直接找shell32.lib这个库,不要去找别的库#pragma comment(lib,"shell32.lib") 在相应的函数中添加如下代码:SHFILEOPSTRUCT fop;fop.wFunc = FO_COPY;//选择执行类型,FO_COP原创 2020-07-13 19:15:48 · 4064 阅读 · 0 评论 -
CMake配置OpenCV时,显示错误:find_host_package(PythonInterp 2.7)' found wrong Python version
CMake配置OpenCV时,显示错误:find_host_package(PythonInterp 2.7)' found wrong Python version问题描述:CMake配置OpenCV时,显示错误:find_host_package(PythonInterp 2.7)' found wrong Python version,具体提示如下:Found PythonInt...原创 2020-04-11 23:21:17 · 8634 阅读 · 0 评论 -
Visual Studio 2017在编译OpenCV 4.2.0时出现编译器错误C2001:常量中有换行符
Visual Studio 2017在编译OpenCV 4.2.0时出现编译器错误C2001:常量中有换行符问题描述:Visual Studio 2017在编译OpenCV 4.2.0时出现编译器错误C2001:常量中有换行符。错误位于“opencv_contrib-4.2.0\modules\cvv\src\stfl\ stringutils.cpp”第255行:str = str....原创 2020-04-11 22:11:59 · 537 阅读 · 0 评论 -
Visual Studio 2017在编译时出现错误E2512:功能测试宏的参数必须是简单标识符
Visual Studio 2017在编译时出现错误E2512:功能测试宏的参数必须是简单标识符问题描述:Visual Studio 2017在编译时出现错误E2512:功能测试宏的参数必须是简单标识符,如下图:解决方案:点击下图红色剪头按钮,弹出如下选项:选择“仅生成”,然后清理,重新生成即可。“生成+IntelliSense”是说:Visual Studio的I...原创 2020-04-11 21:56:12 · 5213 阅读 · 0 评论 -
简单高效有用的正则表达
简单高效有用的正则表达正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。本集讲解正则表达式。0. 举例一个正则表达式是一种从左到右匹配主体字符串的模式。“Regular expression”这个词比较拗口,我们常使用缩写的术语“regex”或“regexp”。正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字...转载 2020-02-16 12:58:07 · 596 阅读 · 0 评论 -
使用Opencv2遇到error: C2061 语法错误 标识符dest
使用Opencv2遇到error: C2061 语法错误 标识符dest在写代码是遇到了这样一个问题,error C2061: 语法错误: 标识符“dest”:1>d:\opencv\opencv\build\include\opencv2\flann\any.h(70): error C2061: 语法错误: 标识符“dest”1> d:\opencv\...原创 2019-10-20 11:30:44 · 2142 阅读 · 0 评论 -
VLD(Visual LeakDetector)内存泄露工具的使用
VLD(Visual LeakDetector)内存泄露工具的使用由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一定的困难。当您的程序越来越复杂时,它的内存管理也会变得越来越困难。内存泄漏、内存越界是最常见的内存问题之一。内存泄漏如果不是很严重的话,在短时间内对程序不会造成太大的影响,而且在进程终止的时候,所有分配的内存都会释放掉...原创 2019-10-15 22:25:49 · 918 阅读 · 0 评论 -
主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
主线程中慎用WaitForSingleObject (WaitForMultipleObjects)下面的代码我调试了将近一个星期,你能够看出什么地方出了问题吗?线程函数:DWORD WINAPI ThreadProc( while(!bTerminate) { // 从一个链表中读取信息并且插入到CListCtrl中 // C...原创 2019-10-13 22:08:33 · 375 阅读 · 0 评论 -
error C2360: 参数初始化操作由“case”标签跳过
error C2360: 参数初始化操作由“case”标签跳过今天用VS2010学习GDI+编程时,在WM_PAINT消息处理时,提示如下错误:错误 2 error C2360: “hDCMem”的初始化操作由“case”标签跳过下面是错误处源代码:case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: 在此添加任意绘图...原创 2019-10-13 21:54:57 · 2927 阅读 · 0 评论 -
_variant_t 数据类型介绍
_variant_t 和 _bstr_t 这两个类分别用于封装并管理 VARIANT 和 BSTR 这两种数据类型,VARIANT 和 BSTR 这两种类型是 COM 中使用的数据类型。为了将C++中的变量应用到ADO编程中,只能进行数据类型的转换。通过 _variant_t 和 _bstr_t 这两个类,就可以方便的把C++类型变量转换成COM中的变量了。_variant原创 2013-05-20 10:05:18 · 4226 阅读 · 0 评论 -
预编译头文件(precompiled header)说明
今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有,就几个头文件,我一看,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。结果不能编译了:fatal error C1083: Cannot open precompiled header file: \'Debug/v13_3.pch\': No such file or directory.怎么rebu转载 2013-06-09 14:26:38 · 3745 阅读 · 0 评论 -
键盘键值表
附件为:键盘键值表原创 2014-11-23 14:48:02 · 447 阅读 · 0 评论 -
C++中回调函数(CALLBACK)初探
C++中回调函数(CALLBACK)初探简介对于很多初学者来说,往往觉得回调函数很神秘,很想知道回调函数的工作原理。本文将要解释什么是回调函数、它们有什么好处、为什么要使用它们等等问题,在开始之前,假设你已经熟知了函数指针。什么是回调函数?简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们原创 2014-11-23 14:52:31 · 2854 阅读 · 0 评论 -
CHAR数组初始化
CHAR数组初始化一般的数组初始化,也就是申请数组的时候我们就初始化。1. char buffer[1000] = {0}; //一般的话,我们只将数组初始化为0,然后再使用。C++中编译器会把第一个初始化值赋给数组的第一个元素,然后用0赋值给其余的元素。2. char buffer[] = {1,2,3,4,5,6}; 数组会自动计数,我们不用指定数字,以免画蛇添足反而出错。3.原创 2014-11-23 14:59:15 · 14506 阅读 · 0 评论 -
C++子类的构造函数
C++子类的构造函数构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。构造原则如下:1.如果子类原创 2014-11-23 14:53:12 · 988 阅读 · 0 评论 -
HPP文件简介
HPP文件简介hpp其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译。1. hpp在C++中的含义Hpp将实现代码直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用project中的cpp文件数与编译次数,也不用再发布烦人的lib与原创 2014-11-23 15:06:16 · 995 阅读 · 0 评论 -
CString::GetLength()获得字节数的正确方法介绍
CString::GetLength()获得字节数的正确方法介绍前段时间,做http协议上传文件及断点续传控件时,在客户端采用C++调用CHttpConnection、CHttpFile进行文件上传。移植到Unicode编码时,上传得到的文件总是小于正常文件。最终发现问题出在CString::GetLength()方法上。当采用Unicode编码时,而且http header字符串中出现了中文原创 2014-11-23 15:04:05 · 4425 阅读 · 0 评论 -
malloc函数与free函数
malloc函数与free函数malloc函数Malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。1函数简介原型extern void *malloc(unsigned int num_bytes);头文件在TC2.0中可以用mallo原创 2014-11-23 15:06:58 · 2733 阅读 · 0 评论 -
#pragma预处理指令详解
#pragma预处理指令详解在所有的预处理指令中,#Pragma指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为:#Pragma Para其中Para原创 2014-11-23 14:50:05 · 485 阅读 · 0 评论 -
CStatic类简介
CStaticCStatic类提供了一个Windows静态控件的性能。一个静态控件用来显示一个文本字符串、框、矩形、图标、光标、位图或增强的图元文件。它可以被用来作为标签,框,或用来分隔其它的控件。一个静态控件不接收输入,也不提供输出;但是,如果它是用SS_NOTIFY风格创建的,则它可以通知其父有关设备点击的消息。创建一个静态控件分两步。首先,调用构造函数来构造此CStatic对象,然后原创 2014-11-23 15:01:01 · 5349 阅读 · 0 评论 -
CMarkup类简介
CMarkup类简介InitializationLoad: Populates the CMarkup objectfrom a file and parses it.SetDoc: Populates the CMarkup objectfrom a string and parses it.OutputSave: Writes the document to file.原创 2014-11-23 14:59:48 · 887 阅读 · 0 评论 -
continue和break的区别
continue和break的区别continue语句用来返回循环的起始处,而break语句用来退出循环。例如,下例中就有一条典型的continue语句:while(!feof(infile)){ fread(inbuffer,80,1,infile);/*read in a line from input file*/ if(!strncmpi(inbuf原创 2014-11-23 15:00:29 · 789 阅读 · 0 评论 -
#define、typedef与const
#define、typedef与const#define(宏定义)只是简单的字符串代换(原地扩展),它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了。typedef是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能,它是语言编译过程的一部分,但它并不实际分配内存空间。一般都遵循#define原创 2014-11-23 14:49:47 · 594 阅读 · 0 评论 -
3种函数参数传递方式
3种函数参数传递方式1. 将变量名作为形参和实参在这种情况下传给形参的是变量的值。传递是单向的,即如果在执行函数期间形参的值发生变化,并不传回给实参,这就是值传递方式。因为在调用函数期间,形参和实参不是同一个存储单元。int main(){ void swap(int,int);//参数为整型变量 int i=3,j=4; cout swap(i原创 2014-11-23 14:50:54 · 3434 阅读 · 0 评论 -
华为C语言编程规范
华为C语言编程规范1 排版1-1:程序块要采用缩进风格编写,缩进的空格数为4个。说明:对于由开发工具自动生成的代码可以有不一致。1-2:相对独立的程序块之间、变量说明之后必须加空行。如下例子不符合规范:if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index;转载 2014-11-23 15:05:02 · 9254 阅读 · 0 评论 -
CFileStatus 使用详解
CFileStatus 使用详解// TTT.cpp : Defines the entry point for the consoleapplication.#include "stdafx.h"#include "stdio.h"#include "afx.h"#include "shellapi.h"#include "windows.h"int main原创 2014-11-23 14:57:48 · 4588 阅读 · 0 评论 -
CString类简介
CString类1.CString::IsEmptyBOOL IsEmpty( ) const;返回值:如果CString 对象的长度为0,则返回非零值;否则返回0。说明:此成员函数用来测试一个CString 对象是否是空的。示例:下面的例子说明了如何使用CString::IsEmpty。// CString::IsEmpty示例CString s;ASSE原创 2014-11-23 15:04:35 · 579 阅读 · 0 评论 -
VC小技巧20个
VC小技巧20个1. 打开CD-ROMmciSendString("Set cdAudio door openwait",NULL,0,NULL);2. 关闭CD_ROMmciSendString("Set cdAudio door closedwait",NULL,0,NULL);3. 关闭计算机OSVERSIONINFO OsVersionInfo; //包含操作系统版原创 2014-11-25 07:57:53 · 451 阅读 · 0 评论 -
VC++调试方法和技巧
VC++调试方法和技巧便于调试的代码风格:1. 不用全局变量;2. 所有变量都要初始化,成员变量在构造函数中初始化;3. 尽量使用const;4. 详尽的注释。VC++编译选项:1. 总是使用/W4警告级别;2. 在调试版本里总是使用/GZ编译选项,用来发现在Release版本中才有的错误;原创 2014-11-25 07:58:05 · 714 阅读 · 0 评论