2、用托管C++可以开发.NET框架的项目类型
使用托管C++应该是C++程序员编写.NET框架应用程序最好的一种选择,通过集成在Visual Studio.NET开发环境的托管C++向导,我们可以创建以下几种开发.NET框架的项目类型:
(1) 托管C++应用程序:用来创建一个支持托管扩展的单独C++应用程序,使用它还可创建任何类型的应用程序,包括.NET框架客户应用程序。
(2) 托管C++类库:用来创建一个支持托管扩展的C++DLL,使用它可以生成一个能被.NET框架应用程序调用的托管类型的组件。
(3) 托管C++空项目:用来创建一个空的托管项目,该项目只含有支持托管扩展的正确编译和链接的开关选项。使用它能将一个已有的C++源文件进入到一个托管环境中。
(4) 托管C++ Web服务:用于创建两个项目,一个是C++托管扩展项目,另一个是部署项目。
3、托管C++与标准C++的主要区别
尽管托管C++是从标准C++建立而来的,但它与标准C++有着本质上的区别,这主要体现在以下几个方面:
(1) 广泛采用“名称空间”(namespace)
名称空间是类型的一种逻辑命名方案,.NET使用该命名方案用于将类型按相关功能的逻辑类别进行分组,利用名称空间可以使开发人员更容易在代码中浏览和引用类型。当然,我们也可将名称空间理解成是一个“类库名”。
尽管很早Microsoft就在Visual C++中支持名称空间的编程方式,但是很少引起Visual C++程序员的普遍关注。现在在托管C++程序中,我们必须使用这一方式,即使用#using和using关键字。例如下面的简单程序代码是在控制台上输出“Hello World”:
#using using namespace System; int main(void) { Console::WriteLine(S"Hello World"); return 0; } |
代码中,#using是用来将一个元数据文件输入到托管C++程序中,这些文件可以是包含托管数据和结构的MSIL (Microsoft intermediate language,微软中间语言)文件,如DLL、EXE、OBJ文件等。mscorlib.dll是.NET框架的一个核心类库,包含主要的名称空间System。程序的第二行代码“using namespace System;”用来使用System名称空间。System是.NET框架根名称空间,包含最基本的类型,如用于数据流的输入/输出的System::IO等。
在对托管C++程序开发的不断深入,我们不久就会发现,许多类型的引用都要在程序的前面使用#using和using来进行。
(2) 基本数据类型的变化
我们知道,标准C++语言的数据类型是非常丰富的。而托管C++的数据类型更加丰富,不仅包含了标准C++中的数据类型,而且新增了__int64(64位整型)、Decimal(96位十进制数)、String*(字符串类型)和Object*(对象类型)等类型,表1-1列出它们各自数据类型。
类型描述 | 标准C++类型名 | 托管C++类型名 | 长度(位) | 布尔型 | bool | bool | 8 | 字符型 | char | signed char | 8 | 无符号字符型 | unsigned char | char | 8 | 短整型 | short [int] | short | 16 | 无符号短整型 | unsigned short [int] | unsigned short | 16 | 整型 | int | int 或 long | 32 | 无符号整型 | unsigned [int] | unsigned int 或 long | 32 | 长整型 | long [int] | long | 32 | 无符号长整型 | unsigned long [int] | unsigned long | 32 | 单精度浮点型 | float | float | 32 | 双精度浮点型 | double | double | 64 | 长双精度浮点型 | long double | -- | 64 | Unicode字符 | -- | wchar_t | 16 | 64位整型 | -- | __int64 | 64 | 无符号64位整型 | -- | unsigned __int64 | 64 | 96位十进制值 | -- | Decimal | 96 | 对象类型 | -- | Object* | 32 | 字符串类型 | -- | String* | -- |
需要注意的是,String和Object在定义一个变量时,注意要有星号(“*”),但这个变量不是指针变量,这与标准C++的含义是不一样的。例如上面的代码可以改为:
#using using namespace System; int main(void) { String* hello = S"Hello World"; Console::WriteLine(hello); return 0; } |
 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |