C/C++
Ocean2006
这个作者很懒,什么都没留下…
展开
-
mfc对象指针不能在线程间传输!
对于大多数mfc对象,请不要在线程间传递它们,不管是栈上的还是堆上的!原因如下: 1、 mfc的大多数类不是线程安全的,调用传入对象的成员函数可能不会报错,但是未必能达到程序预定的功能! 2、 mfc与界面有关的类,其大多数成员方法都是通过sendmessage实现的,如果消息处理函数本身不是线程安全的,你从工作线程中调用这些方法迟早会同你界面线程的用户消息响应发生冲突原创 2010-11-10 20:53:00 · 2813 阅读 · 0 评论 -
Linux下C语言编程--知识点总结
原文链接:http://www.newsmth.net/pc/pccon.php?id=2255&nid=44822本问包括以下几方面的内容:1、基础知识2、进程的创建3、文件的操作4、时间概念5、线程操作6、进程通信、消息管理7、信号处理函数Linux下C语言编程--基础知识http://www.fanqiang.com/a4/b2/2001050转载 2012-06-25 16:51:37 · 2328 阅读 · 0 评论 -
dll中的dllmain函数
应用程序调用dll的资源时(比如dll的对话框),必须进行资源切换,否则程序会死掉!一般dll环境初始化和资源初始化会放在dllmain中,那么资源切换怎么进行呢?1、Dll中的DllMain函数 1.1 DllMain简介 跟exe有个main或者WinMain入口函数一样,DLL也有一个入口函数,就是DllMain。以”DllMain“为关键字,来看看MSDN帮助转载 2010-05-26 01:01:00 · 1596 阅读 · 0 评论 -
The error “Pure Virtual Function Called” about C++
C++程序崩溃时偶尔出现“Pure Virtual Function Called”的提示。产生这一问题的原因在于基类(为接口类)指针或者引用访问自身纯虚函数造成的!但是,接口类本身不能实例化,它怎么能够直接访问纯虚函数!其实很简单,只需要具备以下两个条件: 1、接口类指针(引用)指向的实际类型为其子类类型; 2、修改了指针指向对象的vptr的值,使其指向了接口类的vfta原创 2010-06-04 15:56:00 · 1132 阅读 · 0 评论 -
IPicture应用总结
1、IPicture接口对象的创建 方法1:直接通过文件创建LPCSTR szFileUrl; IPicture *pIPicture; OleLoadPicturePath(CComBSTR(szFileUrl), (LPUNKNOWN)NULL, 0, 0, IID_IPicture, (LPVOID*)&pIPi转载 2010-07-19 18:16:00 · 1320 阅读 · 0 评论 -
可重入函数与不可重入函数
可重入函数主要用于多任务环境中,简单来说就是可以被中断的函数,即在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,返回控制时不会出现什么错误;也意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是 purecode(纯代码)可重入,可以允许有该函数的多个副本在运行,由于它们使用的是分离的栈,所以不会互相干扰。而不可重入的函数由于使用了一些系统资源,原创 2010-08-02 00:00:00 · 3862 阅读 · 1 评论 -
C++多重继承和虚拟继承对象模型、效率分析
本文简单介绍多态和多重继承、虚拟继承的基本概念。随后重点分析了C++中对象模型之间的差异和运行效率。一、多态 C++多态通过继承和动态绑定实现。继承是一种代码或者功能的传承共享,从语言的角度它是外在的、形式上的,极易理解。而动态绑定则是从语言的底层实现保证了多态的发生——在运行期根据基类指针或者引用指向的真实对象类型确定调用的虚函数功能!通过带有虚函数的单一继承我们可原创 2010-08-25 00:17:00 · 5045 阅读 · 2 评论 -
C++中虚函数必须有定义吗?
需要实例化类的虚函数必须有定义,而仅仅定义带有虚函数的类且虚函数没有实现,该类编译是可以通过的! 纯虚函数出现在接口类中,并赋值为0,不要为该函数分配函数地址,从而阻止类的实例化!纯虚函数是没有定义的,如果实现了也不是纯虚函数啦! 一般的成员函数可以只有声明,前提是在应用中不能调用该函数,否则会因找不到定义产生连接错误! 实例化类的虚函数必须有定义,原因如原创 2010-02-25 14:31:00 · 7153 阅读 · 3 评论 -
DLL(Dynamic Link Libraries)专题
目录引言 调用方式 MFC中的DLL DLL入口函数 关于约定 关于DLL的函数 模块定义文件(.DEF) DLL程序和调用其输出函数的程序的关系 作者 引言 比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都转载 2009-12-21 22:40:00 · 2091 阅读 · 0 评论 -
DllMain和多线程死锁
在Windows操作系统中,DLL(动态库)技术有很多优点。例如,多个应用程序可以共享一个DLL文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,有效地利用了内存,而且DLL文件作为一个单独的程序模块,封装性、独立性好,有利于提高软件开发和维护的效率。 DllMain是可选择的DLL入口指针,当进程和线程启动和终止时被系统调用,分别进行创建资源和释放资源等操作,特别地,也可以转载 2010-05-26 00:34:00 · 1206 阅读 · 0 评论 -
dll中DllMain的作用
dll被设计用来当作可共享的模块或者元件,当一个进程或者线程使用时,dll需要获取详细的信息!Win32提供这份信息的做法是调用dll的DllMain函数,即所谓的dll入点函数!该函数在dll被进程或者线程调用时自动由系统调用!作用如下: 1、接受通告信息:dll由线程或者进程加载、卸载 2、初始化dll的状态 3、涉及资源的进行正确的资源切换 4原创 2010-06-03 10:18:00 · 2831 阅读 · 0 评论 -
C++中union成员变量的特殊说明
项目中遇到一个关于union成员变量的问题:当union包含具有构造函数(notrival构造函数)的成员变量时编译器无法编译通过,错误提示为“成员*具有用户定义的构造函数或不常用的默认构造函数”。仔细看了下C++ primer和相关网页的介绍,这是一个涉及union成员变量知识点。 C++中不适合做union成员变量的情形有以下几种: 1、类或结构体中含有nontriv原创 2010-08-05 01:05:00 · 5168 阅读 · 0 评论 -
COM学习笔记
一、C++作为底层组件的缺点 C++编译模型不支持独立二进制组件的设计。C++的编译模型要求客户必须知道对象的布局结构,从而导致了客户和对象可执行代码之间的二进制耦合关系。通常情况下,二进制耦合对于C++非常有好处,因为这样可以产生非常高效的代码。但这种耦合性使得在不重新编译客户的情况下,类的实现无法被替换。由于二进制耦合关系,以及编译器和连接器的不兼容性,简单的把C++类的定义从DL原创 2010-08-12 01:03:00 · 1195 阅读 · 0 评论 -
项目中bug的解决思路二
项目中经常会遇到十分棘手的问题,直至分析和跟踪代码很久都没有头绪,不知道问题根本出现在那个地方!在维护历史悠久的项目代码时就会出现! 针对具体的问题,一般要重复重现问题的现象,确定问题的大概(如何操作引起的)!解决问题时,可以分以下几步: 第一步:从整体上充分思考问题的本质,确定产生问题的大体原因或者代码! 第二步:分析日志(如果有)! 第三步:过程原创 2010-06-13 17:15:00 · 1078 阅读 · 0 评论