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