C++/CLR ref class 中 int 类型的几种区别

本文详细解释了在C++托管类中如何使用不同语法来指定内存分配的位置,包括.NET堆和Win32堆,并强调了在.NET环境中使用特定关键字的重要性。

在 ref class 托管C++类当中

 

int A(0);  // 表示在Net堆中分配内存

int* B = new int; // 表示在Win32堆中分配内存

int^ C = gcnew int; // 表示在Net堆中分配内存

int^% D = gcnew int; // 表示在Net堆中分配内存

int^% D = gcnew int; // 绑定实际Net堆上的内存地址,也就是说地址值不能为 nullptr

 

不过我看了好久这个除了觉得有些变扭之外,其他的还算可以吧

当然在标准C++里面我们也可以这么写,不过有一个区别是

int A(0); // 是分配在Win32堆当中的

// 注意:如果需要使用Net类或值类型必须引用对方Net库

如果你想在C++/CLI中使用C# Task,并且还需要处理带界面的代码,你可以使用以下步骤: 1. 在C++/CLI项目中添加对C#项目的引用。 2. 创建一个C++/CLI的Windows窗体应用程序,并在窗体中包含一个按钮。 3. 在按钮的Click事件处理程序中,使用C# Task来执行异步操作。 以下是一个示例: C#代码: ```csharp using System.Threading.Tasks; namespace MyNamespace { public class MyClass { public static async Task<int> MyMethodAsync(int arg1, int arg2) { await Task.Delay(1000); return arg1 + arg2; } } } ``` C++/CLI代码: ```cpp #using <mscorlib.dll> #using <System.Windows.Forms.dll> #using "MyNamespace.dll" using namespace System; using namespace System::Threading::Tasks; using namespace MyNamespace; using namespace System::Windows::Forms; public ref class MyForm : public Form { public: MyForm() { Button^ button = gcnew Button(); button->Text = "Run Task"; button->Location = Point(10, 10); button->Click += gcnew EventHandler(this, &MyForm::OnButtonClick); this->Controls->Add(button); } private: void OnButtonClick(Object^ sender, EventArgs^ e) { Task<int>^ task = MyClass::MyMethodAsync(1, 2); int result = task->Result; MessageBox::Show(result.ToString()); } }; int main() { Application::Run(gcnew MyForm()); return 0; } ``` 这个示例创建了一个Windows窗体应用程序,其中包含一个按钮。当按钮被点击时,它将使用C# Task执行异步操作,并在任务完成后弹出一个消息框来显示结果。 注意:在C++/CLI中使用C#代码时,你需要在开头使用“#using”指令来引用相关的程序集。此外,你还需要使用“gcnew”来创建引用类型的实例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值