C++/CLI语法简介
ref class:相当于C#中的class,需要通过MyRefClass ^和gcnew、delete使用。
MyRefClass ^obj = gcnew MyRefClass();
obj->MyMethod();
delete obj; // 相当于C++中的obj.Dispose();
value class:相当于C#中的struct,可以直接声明MyValueClass变量来使用。
MyValueClass struct1;
struct1.MyMethod();
无论是ref class还是value class,它们的成员字段&取地址后都是interior_ptr<T>内部指针,需要使用pin_ptr<T>固定以后才能转换为T*普通指针。
pin_ptr<int> ptr = &this->a;
printf("%p\n", (int *)ptr);
</int>
堆栈上的变量直接&取地址就可以获得T*普通指针。
int val = 2;
printf("%p\n", (int *)&val);
String ^转换成const wchar_t *,使用PtrToStringChars和pin_ptr<const wchar_t>。
#include <vcclr.h> // PtrToStringChars
pin_ptr<const wchar_t> pinstr = PtrToStringChars(str);
MessageBox(NULL, (const wchar_t *)pinstr, L"消息框标题", MB_OK);
</const></vcclr.h>
const wchar_t *转换成String ^,直接使用String类的构造函数即可。
wchar_t cstr[] = L"这是一个C语言宽字符串";
String ^str = gcnew String(cstr);