DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
上一页 1 ··· 401 402 403 404 405 406 407 408 409 ··· 474 下一页

2013年9月4日

摘要: 最近的一个项目,是开发一个framework,提供给公司内部不同的产品线使用。 之间遇到的一个问题,就是STL容器的使用, 而结论是不要在公共接口中传递STL容器:这里说的STL容器,但主要则是指容器,字符串类,但其实可以推广到在STL中提供的任何类型,这里说的公共接口,是指需要暴露给客户的sdk头文件,包括函数签名,或者类成员变量;也可以说,不要在暴露给客户的头文件中包含STL的头文件。原因分析为什么有这个结论,我们可以从几个方面来论述:客户端使用的STL版本可能不同因为STL作为标准库,Framework编译的时候使用的STL,与客户端编译的时候使用的STL,版本是有可能不一样的,比如Fr 阅读全文
posted @ 2013-09-04 10:03 DoubleLi 阅读(836) 评论(0) 推荐(0)

摘要: 今天在写一个函数,需要将map作为一个引用参数传入函数体内部进行赋值,结果编译通过,执行时总是崩溃,在网上找到了一些作者写的blog,详细解释了这种情况发生的原因,特转载在这里,便于自己今后查询。原文1:有一个功能模块, 本来是写在主程序当中. 现在觉得有必要将它写成一个 DLL. 于是开始代码的移植. 费了好大的劲. 终于移植完成, 通过编译了. 这时运行程序, CRASH!调试之, 发现是在一个 map 的赋值出现了问题.看 vc6 自带的 STL 的代码:map 的赋值操作, 也就是其中的树赋值操作._Myt& operator=(const _Myt& _X){ _Tr 阅读全文
posted @ 2013-09-04 09:48 DoubleLi 阅读(3195) 评论(0) 推荐(0)

摘要: 百度了一天,现在把结论放上边:1、不要用STL(std::string属于STL)来跨模块传输数据,例如:dll(so)之间,dll(so)和exe(elf)之间。解决方法:使用基本类型、数组、结构体,或者使用下面文章中的方法。2、不要跨模块申请和释放内存。解决方法:可以实现一个接口来释放,其他方法参考下面。今天用个测试exe调用了个dll,有个接口返回std::string,经调试发现挂在该函数return之后,怀疑是string不适合作为返回值,百度一番发现下面这篇解释的很详细。用了很久的dll也会出问题,而且他们用没事,他们用的是vs2010未升级,我怀疑是vs2010升级sp1后和之前 阅读全文
posted @ 2013-09-04 09:46 DoubleLi 阅读(1088) 评论(0) 推荐(0)

摘要: STL跨平台调用会出现很多异常,你可以试试.STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下面是详细解释。原因分析:一 句话-----如果任何STL类使用了静态变量(无论是直接还是间接使用),那么就不要再写出跨执行单元访问它的代码。除非你能够确定两个动态库使用的 都是同样的STL实现,比如都使用VC同一版本的STL,编译选项也一样。强烈建议,不要在动态库接口中传递STL容器!!STL不一定不能在DLL间传递,但你必须彻底搞懂它的内部实现,并懂得为何会出问题。微软的解释:http://sup 阅读全文
posted @ 2013-09-04 09:24 DoubleLi 阅读(6399) 评论(0) 推荐(0)

2013年9月3日

摘要: 前一篇博文中我曾仔细介绍过如何查看C/C++代码的依赖项关系图,在这篇文章中我将会介绍如何使用Visualization and Modeling Feature Pack工具包,查看C/C++源代码的Include关系图,这个功能是针对C/C++编程语言本身的特性而新加入的。在这里我依然会使用工程Hilo作为案例,展示如何以图形化的方式显示工程中源代码文件与头文件之间Include关系。首先,在Visual Studio下打开工程Hilo,在菜单栏中选择菜单“体系结构->生成依赖关系图->By Include File”第一次操作时,有时我们将会发现一个名为“Analyzing 阅读全文
posted @ 2013-09-03 09:55 DoubleLi 阅读(5795) 评论(0) 推荐(0)

摘要: 1、在具备必需的编程基础知识后,试图理解一份完整的代码可以从以下几个方面入手: 1)首先运行以下程序,从外部角度感受一下有哪些功能。 2)了解代码中每个类的功能。看看文档,或者类的注释,那么仅仅是类名也能对类有个大致的印象 3)整理各个类之间的引用、包含等关系,从功能和实现角度,理出类的层次关系 4)在得出类的层次关系的基础,把重点放在各个层次的核心类中,往往核心类包含的功能较为多而复杂,争取明白它包含那几组接口,实现了那些功能。同时,这里重要的一点是,对于一些工具类,算法类,或者实现某些特殊系统功能的类,不管它多么复杂,代码多么长,只要不是类层次关系上的几个核心类,先全扔到一边去。 5)运行 阅读全文
posted @ 2013-09-03 09:49 DoubleLi 阅读(5971) 评论(0) 推荐(1)

2013年8月30日

摘要: 面我们来介绍如何访问动态链接库中的C++类和资源。其具体操作步骤如下:(1)创建一个基于对话框的工程,工程名称为“AccessDll”。设计对话框资源如图1所示。图1 对话框资源设计窗口(2)定义一个名称为CTextDlg的抽象类,因为需要访问动态链接库中的CTextDlg类,因此客户端需要定义一个框架,即抽象类CTextDlg。class CTextDlg//定义抽象类CTextDlg{public:virtual void __stdcall ShowTextDlg(char* pchText) = 0;//定义纯虚方法};(3)定义两个函数指针,用于关联动态链接库中的全局函数。typed 阅读全文
posted @ 2013-08-30 17:00 DoubleLi 阅读(3033) 评论(0) 推荐(0)

摘要: 近来在论坛上很有多帖子问到如何使用DLL中的资源(包括对话框,图标等)的问题,现在笔者就来就此问题谈谈,包含在DLL内部使用资源,DLL中使用其它DLL中的资源和在应用程序中使用资源。 我们先以图标为例说起(其它的资源与此图标的加载原理大致相同),我们要加载图标,一般是调用AfxGetApp()->LoadIcon(…);下面是CWinApp::LoadIcon的实现(afxwin2.inl):_AFXWIN_INLINE HICON CWinApp::LoadIcon(LPCTSTR lpszResourceName) const{ return ::LoadIcon(AfxFindR 阅读全文
posted @ 2013-08-30 16:59 DoubleLi 阅读(3900) 评论(0) 推荐(1)

摘要: from:http://www.cppblog.com/fwxjj/archive/2009/09/25/97219.html 阅读全文
posted @ 2013-08-30 16:57 DoubleLi 阅读(306) 评论(0) 推荐(0)

摘要: 是时候总结一下__declspec(dllimport)的作用了。可能有人会问:__declspec(dllimport)和__declspec(dllexport)是一对的,在动态链接库中__declspec(dllexport)管导出,__declspec(dllimport)管导出,就像一个国家一样,有出口也有进口,有什么难理解的呢?这是一种很自然的思路,开始我也是这样理解。但是在两年前的一个项目中,我发现不用__declspec(dllimport)似乎也可以。比如现在我新建一个使用共享MFC DLL的规则DLL工程:DllDlg。然后我新建两个文件:DllApi.h和DllApi.c 阅读全文
posted @ 2013-08-30 16:56 DoubleLi 阅读(6029) 评论(0) 推荐(1)

上一页 1 ··· 401 402 403 404 405 406 407 408 409 ··· 474 下一页