Ответ 1
gcroot - это шаблонный класс C++/cli, который облегчает хранение управляемых типов в классах C++/cli.
Вы можете, например, иметь следующее:
#include <msclr/gcroot.h>
using namespace msclr;
class Native {
public:
Native(Object ^obj) :
netstring(obj->ToString()) { // Initializing the gcroot<String ^>
}
~Native() {
}
void Print() {
array<Char> ^chars = netstring->GetChars(); // Dereferencing the gcroot<String ^>
_wprintf("netstring is:");
if (chars->Length > 0) {
pin_ptr<Char> charptr = &(chars[0]);
_wprintf("%s", (wchar_t const *)charptr);
}
}
private:
gcroot<String ^> netstring;
};
gcroot действует как ссылка на экземпляр управляемого объекта или типа значения и выполняет всю работу при копировании экземпляра объекта или типа значения. Обычно вам нужно работать с GCHandle и некоторыми функциями C.NET Framework. Это все заключено в gcroot.