C++
caiqi1123
caiqi1123
展开
-
CreateThread后立即CloseHandle,为什么线程还在运行?
最近回顾了下多线程的东西,碰到CloseHandle函数,之前也碰到过,但是自己积累不足,所以也没理解明白。这次再次碰到,想想积累的也差不多了,索性就搞个明白。函数说明BOOL CloseHandle(HANDLE hObject);参数hObject :代表一个已打开对象handle。返回值TRUE:执行成功;FALSE:执行失败,可以调用GetLastErr转载 2017-05-24 11:10:05 · 4796 阅读 · 1 评论 -
LNK2005 LNK1169 Error and LNK4098 Warning LINK : warning LNK4075:
指定链接时的运行时库: 各编译选项对应的库情况:编译选项CRTCPPRT说明/MLlibc.lib 单线程库/MLdlibcd.lib 单线程调试库/MTlibcmt.lib转载 2012-10-04 18:51:20 · 1172 阅读 · 0 评论 -
不要混合使用运行时库的静态版本和动态版本
分类: 其他 2011-01-06 10:5223人阅读 评论(0)收藏举报目录(?)[+]Standard C++ LibraryWhat is the difference between msvcrt.dll and msvcr71.dll?What problems exist if an application uses both msvcrt转载 2012-10-04 19:09:43 · 1236 阅读 · 0 评论 -
C Runtime与C++ standard library 与Windows API的关系
crt是系统运行的基础,包含了c常用的函数集,为运行main做了初始化环境变量、堆、io等资源,并在结束后清理。Windows环境下,VC提供的 C run-time library又分为动态运行时库和静态运行时库。动态运行时库主要是DLL库文件msvcrt.dll(or MSVCRTD.DLL for debug build),对应的Import library文件是MSVCRT.LIB转载 2012-10-04 16:10:09 · 1700 阅读 · 0 评论 -
静态库变为动态库,外部符号如何生成?
Q:I have .lib file with its header (.h) file. This file have a few functions that need to be used in C# application.After googling i found that i need to create a dynamic dll from this static libr原创 2012-09-22 01:52:38 · 1005 阅读 · 0 评论 -
c++ vector
vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件 :#include 使用vector有两种不同的形式,即所谓的数组习惯和STL习惯。一、数组习惯用法1. 定义一个已知长度的 vector :vector ivec( 10 ); //类似数组定义int i转载 2012-08-24 22:20:52 · 1121 阅读 · 0 评论 -
void及void指针含义的深刻解析
void的含义void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。例如:int *pint;void *pvoid;pvoid = pint; /* 不过不能pint = pvoid; */如果要将pvoid赋给其他类型指针,则需要转载 2012-08-25 10:50:29 · 610 阅读 · 0 评论 -
C++ 迭代器失效原因
众所周知当使用一个容器的insert或者erase函数通过迭代器插入或删除元素"可能"会导致迭代器失效,因此很多建议都是让我们获取insert或者erase返回的迭代器,以便用重新获取新的有效的迭代器进行正确的操作:view plaincopy to clipboardprint?iter=vec.insert(iter); iter=vec.erase(iter);转载 2012-08-23 19:35:06 · 1951 阅读 · 0 评论 -
vector排序
最近做的东西,要将vector 中的内容输出,结果发现有些文件被交替反复打开,所以就想吧vector 中的元素排序,学习中发现下面这篇文章总结的挺好的,分享一下也~C++中当 vector 中的数据类型为基本类型时我们调用std::sort函数很容易实现 vector中数据成员的升序和降序排序,然而当vector中的数据类型为自定义结构体类型时,我们该怎样实现升序与降序排列呢?有两种方法,原创 2012-08-31 09:45:45 · 1732 阅读 · 0 评论 -
__cdecl __fastcall与 __stdcall区别
C++ Calling Convention调用约定:__cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,2、原创 2012-06-27 10:06:07 · 833 阅读 · 0 评论 -
回调函数总结
回调函数、消息和事件例程 调用(calling)机制从汇编时代起已经大量使用:准备一段现成的代码,调用者可以随时跳转至此段代码的起始地址,执行完后再返回跳转时的后续地址。CPU为此准备了现成的调用指令,调用时可以压栈保护现场,调用结束后从堆栈中弹出现场地址,以便自动返回。借堆栈保护现场真是一项绝妙的发明,它使调用者和被调者可以互不相识,于是才有了后来的函数和构件,使吾辈编程原创 2012-06-27 09:45:53 · 1479 阅读 · 0 评论 -
C++中extern “C”含义深层探索
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不转载 2012-06-18 07:12:13 · 545 阅读 · 0 评论 -
C语言标准IO: [先读再feof] VS [先feof再读]
刚学习C语言读取文件的时候,可能都遇到过这个“bug”,读到末尾时数据有重复。解决方案也是五花八门,甚至有人把数据先缓存了,再忽略掉最后一组....不妨看一段代码,两种解决方案,猜猜看,究竟哪一个方案是正确的。[cpp] view plaincopyprint?/* *方案一:先判断,后读取 */ while (!feof(fp)) {转载 2012-06-18 14:43:15 · 1823 阅读 · 0 评论 -
name mangling
Name manglingLast updated 4 months agoFrom Wikipedia, the free encyclopediaJump to: navigation, searchThis article is about name mangling in computer languages. For name mangling i转载 2012-06-18 07:38:13 · 1531 阅读 · 0 评论 -
C++中接口与实现分离技术 ,DLL导出类
(1)什么是接口和实现以及区别请问类的实现是不是如下的解释: 用类定义一个对象,就像是int i; i就是int的实现一样,定义了就存在实际容量,那么定义的对象就是类的实现。那么接口指的是什么? 请知道的高手好像'实现'的解释那样举个例子,说明一下!一般地,我们称C++类声明中的“函数原型”为接口,它只是提供给了用户如何使用的具体细节,而隐藏了具体的代码;类似地,我们称类的原创 2012-06-14 19:23:53 · 3825 阅读 · 1 评论 -
DLL怎么样导出类,并在发布头文件屏蔽私有成员
创建了一个MFC extension DLL,添加类,定义如下: #ifdef XXXLIB #define XY _declspec(dllexport) #else if #define XY _declspec(dllimport) #endifclass XY CTest { public: int get(); CTest(); virtual原创 2012-06-14 19:27:14 · 3073 阅读 · 0 评论 -
谈谈vc如何写dll(封装性,隐藏头文件,私有成员)
最近项目进行到一定阶段,老板要求把已完成部分分离开并把各模块封装成dll。用vs开发dll当然很简单,是用vs的向导可以很快写一个dll.但是我遇到了一些问题:刚开始只需要把各个模块的头文件和cpp加入到一个新的dll工程,然后又把导出类的成员函数和成员变量用到的结构体类型、类类型定义的头文件加进来,编译后dll就写出来了。问题是当我要使用这个dll时我就得把所有的相关头文件包含到引用dll的工程原创 2012-06-14 19:19:07 · 2671 阅读 · 0 评论 -
VC++中调试Release版本时怎样设置断点
步骤如下: 1、在Project Settings里选Settings For为All Configurations。 2、在C/C++标签中,Debug info 选 Program Database。 3、在Link 标签中,Category选 Debug,选中Debug info 复选框和Microsoft format。 现在就可以像在调试版原创 2012-09-16 23:52:21 · 1490 阅读 · 0 评论 -
c++开源代码相关网站
我是一个C/C++开发者,我收集的代码相关网站也是以C/C++为主的,这都是我在开发过程中查找资料时用到或发现的一些网站。现在我把它们列出来,希望对大家有帮助,也希望能够与大家多多交流代码相关的网上资源。所以我在此抛砖了另外声明一下,那些要收费的源码网站,特别是国内的,绝不收录。因为它们的代码一来无用,二来非法,三来大部分能在网上找到。也建议大家别去那些地方。http://search.c转载 2012-09-18 22:17:11 · 1005 阅读 · 0 评论 -
C Runtime Library 的来历
msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能. C Runtime Library 的来历, API, STL, MFC, ATL关系 刚接触Windows开发时,为了快速入门查了不少资料,没想转载 2017-05-24 10:33:03 · 710 阅读 · 0 评论 -
静态数组与动态数组
数组是程序设计中是一个非常重要的概念。数组是一个用于收集大量类似数据的容器, 以及其每一个元素能被相同处理过程迭代来处理的一个抽象体。 创建数组一般有三种方式:全局/静态范围的数组,局部变量数组,申请堆空间来创建数组。 其中,全局/静态范围的数组,以及局部变量属于静态数组。 而申请堆空间来创建数组的属于动态数组。 a[7]与p1_a[7]是一样的么?转载 2017-05-12 10:02:05 · 1534 阅读 · 0 评论 -
C 中 extern 和 static
C语言中:extern :extern(外部引用)可以置于变量或者函数前,以标示变量或函数的定义在别的文件中,在一个文件中用到的extern这些变量或函数是外来的,不是本文件定义的,提示编译器遇到此变量和函数时在其他模块中寻找其定义。注意,只有其他文件中的全局变量才能被其他文件所extern。extern int val;注: 此处的函数类型可以省略,即extern转载 2012-06-07 19:04:31 · 850 阅读 · 0 评论 -
获得当前应用程序目录的GetCurrentDirectory()和GetModuleFileName()函数 .
bool CtestDlg::GetXMLMessage(void) { char cModulePath[MAX_PATH] = {0}; ::GetModuleFileName(NULL, cModulePath, MAX_PATH); ::PathRemoveFileSpec(cModulePath); char cCurrentP转载 2012-11-23 07:20:42 · 1926 阅读 · 0 评论 -
Halcon与C++
参考地址:http://tsindahui.blog.sohu.com/151668003.html1. 从Halcon到VC++ read_image(&Image,"文件名");//读入的为灰度图像 //获取图像指针,注意输出变量的类型char lpcsType[MAX_STRING];Hlong Pointer,Width, Height;ge转载 2013-06-16 16:33:19 · 2809 阅读 · 0 评论 -
VC6.0和VS2008环境下配置halcon开发环境
VC6.01、Project菜单->Settings->Link,在Category下拉菜单下选择General,在此属性页中的Object/library modules下面添加halconcpp.lib静态库。 (主需要键入就可以了)2、 Project菜单->Settings->Link,在Category下拉菜单下选择Input,在此属性页中的Additional li转载 2013-06-04 16:51:48 · 3785 阅读 · 0 评论 -
C和C++混合编程(error C2059: syntax error : 'string')
C和C++混合编程extern "C"表示编译生成的内部符号名使用C约定。C++支持函数重载,而C不支持,两者的编译规则也不一样。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字可能为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生转载 2013-05-30 20:35:22 · 1917 阅读 · 0 评论 -
ASSERT VERIFY TRACE assert
#ifdef NDEBUG#define assert(exp) ((void)0)#else#ifdef __cplusplusextern "C" {#endif_CRTIMP void __cdecl _assert(void *, void *, unsigned);#ifdef __cplusplus}#endif转载 2012-11-25 17:51:58 · 883 阅读 · 0 评论 -
GUI编程
C语言系的:VC++ MFC .net QT(开源) wxwidgets(开源)等JAVA系的:swing awt等转载 2012-11-24 19:42:23 · 779 阅读 · 0 评论 -
.Net 与 MFC 的区别 .
1. MFC是在API的基础上封装出来的一个类库,给C++程序员在Windows上快速开发用的。 .Net类库是在Windows非托管API的基础上封装出来的一个托管类库,给程序员在各种Windows平台上跨平台开发用的。2. 只是两个不同平台的编程,一个是NET平台,一个是WIN32。3. .NET的基类是基于.net运行时库的,通过运行时库对操作系统和硬件进转载 2012-11-24 19:18:49 · 1503 阅读 · 0 评论 -
C++中STL的string类模板与MFC中Cstring类区别与联系
最近在做一个linux上的C语言的项目,要频繁的用到char *字符串操作,即用C语言提供的string.h中的标准字符串操作API对字符进行操作,工作量非常的,怀念以前用C++做项目的时候用STL的 string模版类。当然如果是在windows上开发支持MFC的工程,也可以用MFC类库中的Cstring。在Linux上当然不会有微软的MFC 类库了咯,所以只能用标准C++的string类(也就转载 2012-11-24 16:56:06 · 1830 阅读 · 0 评论 -
关于迭代器(iterator)和指针的思考
今天有点闲,于是打开电子版的>来看。其中9.2节有一个表9.4,它指出了vector 和 deque 类型迭代器支持的操作。这本来是很平常的,但是表中的iter1+iter2引起了我极大的兴趣。于是写了下面一段代码来验证是否真的能支持这运算#include #include using namespace std;int main(){ vector vec(10)转载 2012-11-11 17:53:57 · 2264 阅读 · 0 评论 -
Debug和Release区别
VC下Debug和Release区别最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常。网上查找了些资料,在这 罗列汇总下,做为备忘~一、Debug 和 Release 的区别 Debu转载 2012-11-25 13:46:35 · 859 阅读 · 0 评论 -
VC++动态链接库(DLL)编程深入浅出
1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该原创 2012-02-13 13:41:05 · 1278 阅读 · 0 评论 -
从 相对路径 说开来
从 相对路径 说开来 在Qt论坛经常看到网友抱怨: •QPixmap("dbzhang800.png") 加载图片不成功 •QFile("dbzhang800.txt") 打开文件失败 •... 遇到这种问题,我一般回答:请注意区分进程的"工作目录"与程序所在的目录 。但这种回答似乎还是显得太苍白了,既然如此,整理一下吧。 •用到了相对路径,你清楚"相对"是相转载 2012-09-25 15:09:25 · 1411 阅读 · 0 评论 -
Ansi、Unicode、UTF8字符串之间的转换和写入文本文件
转载请注明出处http://www.cppblog.com/greatws/archive/2008/08/31/60546.html最近有人问我关于这个的问题,就此写一篇blogAnsi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件Unicode字符串,每个字符(汉字、英文字母)都占2个字节,以2个连续的\0结尾,NT操作系统内核用的是这转载 2012-09-22 19:13:18 · 13030 阅读 · 0 评论 -
在DLL中使用资源
在CSDN论坛上最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是一个很普遍的关于如何在DLL中使用资源的问题。这里我们从Win32 DLL和MFC DLL两个方面来分析并解决这个问题。1.Win32 DLL 在Win32 DLL中使用对话框很简单,你只需要在你的DLL中添加对话框资源,而且可以在对话框上面设置你所需要的控件。然后使用DialogBox或者Create转载 2012-06-15 19:48:01 · 930 阅读 · 0 评论 -
总结c++的“编译、链接”时引发的血案——动态、静态链接库
动态链接库生成一个动态链接库应包含两个文件 *.dll *.lib。lib是编译时需要的,dll是运行时需要的。如果要完成源代码的编译,有lib就够了。如果要使动态连接的程序运行起来,有dll就够了。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。Dll文件包含函数的实现,是可执行的代码。Lib文件是dll的一个映像文件,一般包含一些索引原创 2012-06-07 21:00:04 · 1328 阅读 · 0 评论 -
vc6.0配置头文件,和库文件
三.附加头文件包含VC6.0中:VC6.0默认include包含路径:Tools>Options>Directories>Include files。对于特定项目的头文件包含,在“Project Setting>C/C++ (Category:Preprocessor)>Additional include directories”处添加附加头文件目录,相对目录参考*.ds转载 2012-02-14 14:39:18 · 2036 阅读 · 0 评论 -
Dependency Walker使用说明
在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库。现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows的基石 随便打开一个系统目录,一眼望去就能看到很多扩展名DLL的文件,这些就是经常说的“动态链接库”,DLL是Dynamic Link Library(即“动态链接库”)的缩写。从Microsoft公司推出转载 2012-02-14 16:09:27 · 2042 阅读 · 0 评论 -
如何区分“动态库的导入库”与“静态库”
通过命令: >lib /list Demo.lib 如果该 Demo.lib 是静态库,输出如下:>lib /list Demo.libMicrosoft (R) Library Manager Version 8.00.50727.42Copyright (C) Microsoft Corporation. All rights reserved../De转载 2012-02-13 13:13:26 · 785 阅读 · 0 评论