c++/cli快速入门

C++/CLI是C++用于.NET编程的一种方式,它引入了句柄(^)来表示安全指针,避免内存泄漏。本文介绍了句柄与指针的区别,以及如何创建和使用类、值类型、枚举、数组、属性等。此外,还讲解了如何包装本机C++类和C回调,以及从托管回调到C回调的方法。

1、什么是C++ /CLI

众所周知,C ++是一种高级语言,主要被认为是C语言的超集,它添加了许多功能,例如OOP和模板,但是什么是CLI?

CLI代表公共语言基础结构。但总而言之:这是一个开放的规范,描述了可执行代码和运行时环境,该环境允许多种高级语言在不同的计算机平台上使用,而无需为特定的架构进行重写。[2]

现在,C ++ / CLI是用C ++编写.NET的方法,类似于使用C#或VB.NET。

2、Handles and Pointers(句柄与指针)

您可能已经在C ++ / CLI代码中看到标点符号“ ^”并对此感到疑惑。如您所知,在C ++中,表示指针,在C ++ / CLI中,表示句柄。现在,“ *”指定驻留在CRT堆上的本机指针,而句柄则指定“安全指针”并驻留在托管堆上。可以将这些句柄视为引用,并且与本机指针不同,如果未正确删除它们,它们将不会引起内存泄漏,因为GC会处理这些问题,并且它们没有固定的内存地址,因此将在执行过程中移动。

要创建某个特定类或值类型的新引用,我们必须使用“ gcnew”关键字进行分配;例如:

System::Object ^x = gcnew System::Object();

值得注意的是,nullptr关键字“ ”表示空引用。除了标点符号“ ^”外,我们还有百分比“ %”代表跟踪参考;我想引用ECMA-372:

N* pn = new N;   // allocate on native heap
N& rn = *pn;     // bind ordinary reference to native object
R^ hr = gcnew R; // allocate on CLI heap
R% rr = *hr;     // bind tracking reference to gc-lvalue

在一般情况下,加标点%^因为加标点&*

2、Classes and UDTs (user defined types)

注意:在public后面跟着ref关键字

public ref class MyClass
{
private:
public:
  MyClass()
  {

  }
}

3、Hello World

在本节中,您将学习如何创建一个简单的C ++ / CLI框架程序。首先,您需要知道如何定义正确的“ main”。您会注意到,两个原型(C main和C ++ / CLI main)都需要将字符串数组传递给它们。

#using <mscorlib.dll>

using namespace System;

int main(array<System::String ^> ^args)
{
  System::Console::WriteLine("Hello world");
  return 0;
}

4、类和用户自定义类型

Class (类)

在此示例中,我们将说明如何创建类和用户定义的类型。要创建托管类,您要做的就是在类定义的前面加上保护修饰符,然后加上“ ref”,从而:

public ref class MyClass
{
private:
public:
  MyClass()
  {

  }
}

要创建本机类,您只需按照自己的方式创建即可。现在,您可能想知道C ++ / CLI中的析构函数,如果它们仍然表现相同,答案是肯定的,则析构函数(确定性)的使用方式仍与在C ++中使用的方式相同。但是,在为您Dispose()透明实现IDisposable接口之后,编译器会将析构函数调用转换为调用。除此之外,还有由GC调用的所谓终结器(非确定性),它的定义如下:“ !MyClass()”。在终结器中,您可能要检查是否调用了析构函数,如果没有,则可以调用它。

#using <mscorlib.dll>

using namespace System;

public ref class MyNamesSplitterClass
{
private:
  System::String ^_FName, ^_LName;
public:
  MyNamesSplitterClass(System::String
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rains卍Soft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值