C++ 多重继承和虚继承的内存布局

这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。原文见这里(By Edsko de Vries, January 2006)

敬告: 本文是介绍C++的技术文章,假定读者对于C++有比较深入的认识,同时也需要一些汇编知识。

本文我们将阐释GCC编译器针对多重继承和虚拟继承下的对象内存布局。尽管在理想的使用环境中,一个C++程序员并不需要了解这些编译器内部实现细节,实际上,编译器针对多重继承(特别是虚拟继承)的各种实现细节对于我们编写C++代码都或多或少产生一些影响(比如downcasting pointerpointers to pointers 以及虚基类构造函数的调用顺序)。如果你能明白多重继承是如何实现的,那么你自己就能够预见到这些影响,进而能够在你的代码中很好地应对它们。再者,如果你十分在意的代码的运行效率,正确地理解虚继承也是很有帮助的。最后嘛,这个hack的过程是很有趣的哦:) 阅读全文 >>

类别: C++/VB. 标签: , . 阅读(672). 评论(0) »

C# 如何连接操作 MySQL 数据库(使用 SourceForge 上的驱动)

前面一篇 http://unmi.cc/csharp-operate-mysql-1 讲了 C# 里用 MySQL 官方驱动怎么去连接操作 MySQL 驱动,就是 MySQL 的 JDBC 驱动有两个一样,针对 .NET 的 MySQL 驱动也有两个。这里介绍的就是 .NET 连接 MySQL 的第二个驱动,来自于 Sourceforge 的开源驱动。

首先,到 http://sourceforge.net/projects/mysqldrivercs/ 下载,写此篇时下载的版本是 MySQLDriverCS-n-EasyQueryTools-4.0.1-DotNet2.0.exe。安装,其中带有源代码和例子,只有三个动态库 libmySQL-4.0.dll、libmySQL.dll、MySQLDriverCS.dll,光看动态库好像不及官版的驱动强大。把安装目录中的 MySQLDriverCS.dll 引入到你的 C# 项目中就可以开始用了。具体用法还需时刻关注安装目录中的 help\SDK\Documentation.chm 帮助文档。 阅读全文 >>

类别: .Net. 标签: , , . 阅读(1,642). 评论(0) »

C# 如何连接操作 MySQL 数据库(使用官方驱动)

MySQL 以其免费和足够的性能受到很大的青睐,当然对于国内小公司,甚至是大公司如果对版权看得薄,敢冒险的话,随便装个 SqlServer、DB2、Oracle 都行。对于 SqlServer 数据库,因其与 MS 是一家,自然在 .net 类库中有内建支持,假如 MySQL 就得找第三方的驱动了 -- .net 中多讲 Provider。在这里我也是作为一个预研专题,记录下 C# 连接 MySQL 的两种方法,分别使用 MySQL 官方的和 SourceForge 上一个开源的 MySQL 驱动。至于 ODBC 的办法,就不提了,觉得意义不大,同样要安装个 MySQL ODBC 驱动,而且 ODBC 又如此之笨拙。

使用 MySQL 官方区动连接操作 MySQL 数据库 阅读全文 >>

类别: .Net. 标签: , , . 阅读(3,141). 评论(0) »

Lucene 应用 WordNet 的同义词典实现同义词检索(C#版)

同义词检索应该很多时候会用得上的,举个简单的例子,我们搜索关键字 good 的时候,与 well 和 fine 等的词条也可能是你想要的结果。这里我们不自己建立同义词库,直接使用 WordNet 的同义词库,本篇介绍 C# 版的实现步骤,还会有续篇--Java 版。

由于 Lucene 是发源于 Java,所以 C# 的应用者就没有 Java 的那么幸福了,Java 版已经有 3.0.2 可下载,C# 的版本还必须从 SVN 库里:https://svn.apache.org/repos/asf/lucene/lucene.net/tags/Lucene.Net_2_9_2/ 才能取到最新的 2.9.2 的源码,二制包还只有 2.0 的。 阅读全文 >>

类别: .Net. 标签: , , . 阅读(1,502). 评论(0) »

Linq to XML 用一句话读出 RSS 文章列表

在页面的 Page_Load() 方法中写上这句话就行了:

 new XDocument(
    new XElement("ol",
        from item in XDocument.Load("http://cnblogs.com/rss").Descendants("item")
        select new XElement[]{
            new XElement("li",
                new XElement("a",(string)item.Element("title"),
                    new XAttribute("href",(string)item.Element("link"))
                )
            )
        }
    )
).WriteTo(new XmlTextWriter(Response.OutputStream,Encoding.UTF8));

效果是:  阅读全文 >>

类别: .Net. 标签: , , , . 阅读(22). 评论(0) »

XSLT 文件中使用 C#/JScript/VB 自定义函数

在用 XSLT 转换 XML 到其他格式时,不光是原数据搬到别处,还可能需要对数据进行一定的处理,比如一个标志位要 XSLT 转换为表义字符串(1->True; 0->False),或者日期类型格式的转换等等。所以这时候我们在 XSLT 中要用到函数来处理这些细节上的转换。

XSLT 含有超过 100 个内建的函数,XQuery 1.0、XPath 2.0 以及 XSLT 2.0 共享相同的函数库。
这些函数用于字符串值、数值、日期和时间比较、节点和 QName 操作、序列操作、逻辑值,等等。

关于 XSLT 的内置函数请参数:XSLT 函数参考手册 和 XPath、XQuery 以及 XSLT 函数阅读全文 >>

类别: XML/DOM. 标签: , , , . 阅读(570). 评论(0) »

C# 使用 iTextSharp(5.0.2) 生成 PDF 文档

前一篇 C# 使用 iTextSharp(4.1.2) 生成 PDF 文档 写了一个用 iTextSharp 4.1.2 生成 PDF 文档的例子,由于新版 iTextSharp 5.0.2 变化太大,所以有必要再记录一下。比较两篇你可以很明显的感觉到它们之间 API 上的差异来。 阅读全文 >>

类别: .Net. 标签: , , . 阅读(2,048). 评论(0) »

C# 使用 iTextSharp(4.1.2) 生成 PDF 文档

在 Java 里操作 PDF 文档的组件首当其充就是 iText,几乎是不二之选,惯性思维到 C# 里应该有一个相应的实现吧,对了,那就是 iTextSharp,这里来看看 iTextSharp 怎么生成一个 PDF 文档的。此篇所选版本是 iTextSharp 4.1.2,因与 iTextSharp 5 有较大的差别,所以分两篇来说明。

这两个版本的主要区别有,iTextSharp 5 里不再有 iTextSharp.text.Table、HeaderFooter 类的,且实现了自己的 Font, Color,不再依赖于 System.Drawing 了;在设置页眉页脚实现也不一样。

下面例子,用 OLDDB 从一个 Excel 里读取第一个 sheet,然后在 PDF 文档里生成张表格: 阅读全文 >>

类别: .Net. 标签: , , . 阅读(918). 评论(0) »

C++的头文件中类声明后忘记加分号产生不可预期的编译错误

头文件 Test.h 的内容是
class Test
{
public:
 virtual void test1();   
}
实现文件是 Test.cpp
#include "Test.h"
#include <iostream>
using namespace std;
void Test::test1(){  cout<<"Hello"<<endl; }

编译时出现错误
c:\program files\microsoft visual studio\vc98\include\errno.h(29) : error C2143: syntax error : missing ';' before 'string' 阅读全文 >>

类别: C++/VB. 标签: . 阅读(171). 评论(0) »

C# 及其特性

1.C#是一种从C++和Java继承而来的,简单的,现代的,面向对象的语言.
2.它的目标是综合Visual Basic高产和C++底层高效的特性.
3.它是Microsoft Visual Studio7.0 的一部分.
4.Visual studio支持Vb,VC++,C++,Vbscript,Jscript.所有这些语言提供对Microsft .NET平台的访问.
5..NET包括一个Common Execution引擎和一个丰富的类库.
6.Microsofts JVM eqiv就是Common language(通用语言)运行库(CLR).
7.CLR支持不止一种语言,诸如 C#,VB.NET,Jscript,ASP.NET,C++.
8.源代码--->中间语言代码(IL)--->(JIT 编译器)机器码. 阅读全文 >>

类别: .Net. 标签: , . 阅读(46). 评论(0) »