摘要:VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”这个错误,那 么就说明该程序动态链接了VC9的运行时库,(如果还用到了MFC,那么可能动态链接了VC9的MFC库,同理还有ATL库),以及缺少对应的 manifest文件,程序在目标机器上没有找到这些库和配置文件,因此导致了这个错误。出现这种情况的VC9编译器可能存在3个版本,接下来分别阐明:1、没有打过任何补丁的VS2008该版本对应的CRT/MFC/ATL库的版本号为9.0.21022.8,这个版本号在后面
阅读全文
随笔分类 - C++/C
摘要:字符串,顾名思义是由字符组成的字符串,在标准C,标准C++,MFC中字符串这一功能的实现是不相同的,C++完全兼容了C。1. 标准C中的字符串 在标准C中没有string这样的数据类型,C中的字符串是有char类型的字符数组或者char类型的字符指针来实现的。例如: char name[26]="This is a C-style string";或者 char *name="This is a C-style string"; 类型的字符串以\0为结束标记,所占内存是实际子符长度+1,其初始化和赋值都要逐个字符的赋值,修改不辨,粒度太小,很不直观,是程
阅读全文
摘要:sizeofsizeof操作符的作用是返回一个对象或类型名的长度,长度的单位是字节。返回值的类型是标准库命名为size_t的类型,size_t类型定义在cstddef头文件中,该头文件是C标准库的头文件stddef.h的C++版本。他是一个和机器相关的unsigned类型,其大小足以保证内存中对象的大小。1、什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggr...
阅读全文
摘要:char acStr[] = "aaaaa";//这个是字符数组,只含有5个字符char *pcStr = "aaaaa";//这个是字符串,含有6个字符,即5个a加一个结束符'\0'输出的结果 strlen()长度都是5, 所以即便是字符串,最后取长度的时候,也不考虑\0: strlen()计算字符串长度,忽略结束符 \0char *p = "hello";char *q = "world";char o[] = "hello";cout<<"hello&
阅读全文
摘要:一、简介 SQLite是一个基于文件的轻量级数据库,但功能还挺强,速度也很快,对于小型数据库应用开发绝对够用了。使用起来也非常方便,下面的介绍可以看出来,使用起来真的非常简单。二、官方网站 Sqlite的官方网站www.sqlite.org,在该网站可以下载最新的sqlite版本。三、辅助工具工具 Sqlite数据库的管理工具有SQLiteManager、SqliteAdmin等。SqliteManager只有英文版,但功能强大,有个问题就是不支持ANSI字符集的汉字显示。其自带的帮助文档有SQL语句的详细介绍,对于不熟悉Sql语句的人来说很方便。而且它的很多操作都有自动的SQL语句提示,对.
阅读全文
摘要:printf可能是许多程序员在开始学习C语言时接触到的第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf了解多吗?在将各种类型的数据构造成字符串时,sprintf的强大功能很少会让你失望。 由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf比printf有用得多。所以本文着重介绍sprintf,有时也穿插着用用pritnf。sprintf是个变参函数,定义如下:int sprintf( char *buffer, const c
阅读全文
摘要:getenv(取得环境变量内容) 相关函数 putenv,setenv,unsetenv 表头文件 #include<stdlib.h> 定义函数 char * getenv(const char *name); 函数说明 getenv()用来取得参数name环境变量的内容。参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为name=value。 返回值:执行成功则返回指向该内容的指针,找不到符合的环境变量名称则返回NULL。 范例?#include<stdlib.h> mian() { char *p; if((p = gete..
阅读全文
摘要:一个很好的编程随想的博客http://program-think.blogspot.com/2009/03/producer-consumer-pattern-0-overview.html架构设计:生产者/消费者模式[0]:概述1、如何确定数据单元2、队列缓冲区3、环形缓冲区4、双缓冲区生产 消费2010-06-01 10:13#include <boost/thread/thread.hpp> #include <boost/thread/mutex.hpp> #include <boost/thread/condition_variable.hpp>#
阅读全文
摘要:在参考文献基础上。补充和完善了。Matlab与C/C++混合编程接口及应用 摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序设计语言,两者互补结合的混合编程在科学研究和工程实践中具有非常重要的意义。从Matlab调用C/C++代码及C/C++调用m文件两方面,深入地研究了它们之间混合编程的原理和实现机制,并且给出了具体条件下的混合编程方法和步骤。实验表明,给出的Matlab与C/C++混合编程接口及应用方法是有效、实用的。 1引言 Matlab是当前应用最为广泛的数学软件,具有强大的数值计算、数据分析处理、系统分析、图形显示甚至符号运算等功能[1]。...
阅读全文
摘要:Visual Studio 2008 环境变量的配置(改为:Visual Studio 2008 中程序路径配置 更合理)在调试 Visual Studio 2008 程序时,经常有一些动态链接库(即 dll 文件)需要加载到工程里,这样才能依赖第三方库进行程序调试。这些动态链接库,往往都是测试版本或是开发中的版本,或者会有若干个版本;这个时候,如果直接把 dll 所在目录加到 PATH 里,则会有潜在冲突的危险;如果直接拷贝到 Visual Studio 的目录下,假如测试工程太多,每次有新版本的动态链接库更新时,你需要更新若干次,拷贝、粘贴苦不堪言。在开发过程中,究竟怎样来让 Visual
阅读全文
摘要:Visual Studio 2008 和 Windows 环境变量对设置 相对路径很重要,这样便于代码的移植,即使换一台计算机,代码不用更改配置,直接就能用。 可以在项目的“工具”“属性页”对话框中任何接受字符串的位置使用这些宏。这些宏不区分大小写。关于如何自己定义环境变量详见我的另一文章:http://blog.csdn.net/jtop0/article/details/7574139宏说明$(RemoteMachine)在“调试”属性页上设置为 Remote Machine 属性的值。有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置。$(Configuration)当前项目配
阅读全文
摘要:在vs2008的Project->Property设置里经常会看到类似$(IntDir)、$(OutDir)、$(ProjectName) 的预定义宏。以vc2008为例,有时候我们在引用别的库时需要在项目设置里添加额外的头文件和库文件路径,我们不想每个路径都用一大堆的“../.. /include”或绝对路径表示,因为不但繁琐而且万一路径改变每处都要修改,不方便维护,我们希望能自定义类是$(myDir) = c:/myPrj/include的宏。有人说: “vcproj工程设置文件里,完全可以定义一个变量 VAR=whatwhatwhat,然后"$(VAR)",类似
阅读全文
摘要:http://blog.sina.com.cn/s/blog_6163bdeb0100pcld.html为窗口或其中的控件添加提示框,可以使用MFC的类CToolTipCtrl,使用方法如下1.在窗口的类定义中添加变量说明:class CTooltipTestDlg : public CDialog{…public:CToolTipCtrl m_tt;…}2.在对话框的OnInitDialog()函数中添加如下代码EnableToolTips(TRUE);m_tt.Create(this);m_tt.Activate(TRUE);CWnd* pW=GetDlgItem(IDC_CHECK1);
阅读全文
摘要:很多的界面设计都需要有Tip提示,下面描述一下Tip的简单使用方法: 1. 首先要New一个CToolTipCtrl的对象m_pContentTip 2. 调用CToolTipCtrl的create函数,指定其父窗口。可以为某个控件,也可以为this。一般设为this。m_pContentTip->Create( this, TTS_ALWAYSTIP );3. AddTool。此函数是设置与某个控件关联的Tip文本。此处可以为多个控件添加不同的提示信息。 m_pButtonTip->AddTool( GetDlgItem( 控件ID ), 文本 ); //#add 一定要用Add
阅读全文
摘要:今天在网上看到一篇VC项目管理的文章,感觉非常有用。特别是对大、中型项目的规范化、条理化管理非常有帮助,特转贴这里。VC 2005 解决方案的目录结构设置和管理Roger (roger2yi@gmail.com)一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档。除此以外,根据项目的需求,还会使用一些第三方的库。所以为解决方案设置一个合理的目录结构,不但可以使得代码管理更井井有条,项目成员之间也更容易相互配合,更重要的是能够使得最终应用程序的安装包制作,源代码打包发布和转移变得十分容易。解决方案与项目:从VC6之
阅读全文
摘要:HANDLE hMutex;hMutex = ::CreateMutex(NULL, FALSE, NULL);::WaitForSingleObject(hMutex, INFINITE); // 1::WaitForSingleObject(hMutex, INFINITE); // 2好多初学者都认为,设置为FALSE就是没有获得获得信号。。 其实这是错误的。真确的理解是:CreateMutex()函数的第二个参数是FALSE,表示刚刚创建的这个Mutex不属于任何线程也就是没有任何线程拥有他,一个Mutex在没有任何线程拥有他的时候,他是处于激发态的, 所以处于有信号状态。当你调用::
阅读全文
摘要:如何终止线程的运行(C/C++)想要终止线程的运行,可以使用以下方法:1、线程函数返回(最好使用该方法)。2、通过调用ExitThread函数,线程将自行撤消(最好不使用该方法)。3、同一个进程或另一个进程中的线程调用TerminateThread函数(应避免使用该方法)。4、ExitProcess和TerminateProcess函数也可以用来终止线程的运行(应避免使用该方法)。下面将详细介绍终止线程运行的方法:1-4,并说明线程终止运行时会出现何种情况:5。1、线程函数返回始终都应该将线程设计成这样的形式,即当想要线程终止运行时,它们就能够返回。这是确保所有线程资源被正确地清除的唯一办法。
阅读全文
摘要:在VC编程中常常碰到的.lib文件有一个需要注意的地方是:静态库——函数和数据被编译进一个二进制文件(扩展名问.lib)。在使用静态库的情况下,在编译连接可执行文件时,连接器从库中复制这些函数和数据并把他们和应用程序的其他模块组合起来创建最终的可执行文件(.exe)文件,当发布产品时,只需要发布这个可执行文件,并不需要发布被使用的静态库。动态库——在使用动态库时,往往提供两个文件:一个引入库(.lib)文件和一个DLL(.dll)文件。虽然引入库的后缀名也是".lib",但是,动态库的引入库文件和静态库文件有着本质的区别。对一个dll来说,器引入库文件(.lib)包含该DL
阅读全文
摘要:原因:#pragma comment (lib,"xxx.lib")//默认和引用的CPP文件在一个文件夹中解决方法1:将xxx.lib和调用pragma comment的源文件放在一个目录(注意是调用它的源文件,不是头文件)。解决方法2:也可以在xxx.lib前加上全路径名如:#pragma comment(lib, "c:\\windows\\system32\\xxx.lib")。解决方法3:修改项目属性中,配置属性--》连接器-->常规--》附加库目录 中加上xxx.lib所在目录。解决方法4:工具--》选项--》项目和解决方案--》vc+
阅读全文
摘要:1、两者均可使用VS IDE中AppWizard来建立框架,前者使用“MFC ActiveX Control Wizard”,后者使用“ATL COM AppWizard”。2、用MFC建立的ActiveX控件的扩展名缺省为“.ocx”;用ATL(活动模板库)建立的扩展名缺省为“.dll”。3、用MFC建立ActiveX控件要简单得多,原因是MFC省去聊很多低级的COM概念,且控件设计中可使用多种MFC类,如CString、 CWnd 、CDC等;用ATL建立ActiveX控件则复杂些,且只能使用Windows SDK(Win API)函数。4、MFC ActiveX控件文件要比ATL的小,但
阅读全文