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

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

被折叠的 条评论
为什么被折叠?



