Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você não pode declarar um tipo de identificador em um tipo nativo.vcclr.h fornece gcroot de modelo de wrapper de fortemente tipado, para se referir a um objeto CLR do heap C++.Este modelo permite que você incorpore um identificador virtual em um tipo nativo e tratá-lo sistema autônomo se fosse o tipo subjacente.
O modelo gcroot é implementado usando os recursos da classe de valor sistema::tempo de execução::InteropServices::GCHandle, que oferece "alças" para a coleta de lixo heap.Observe que as alças propriamente ditas não são lixo coletado e são liberadas quando não mais em uso, o destruidor da classe gcroot (esse destruidor não pode ser chamada manualmente).Se você criar um objeto gcroot sobre o nativo heap, você deve chamar excluir no recurso.
O tempo de execução manterá uma associação entre o identificador e o objeto CLR, que faz referência a ele.Quando o objeto CLR se move com a pilha de coleta de lixo, a alça irá retornar o novo endereço do objeto.Uma variável não precisa ser fixado antes que ele seja atribuído a um modelo gcroot.
Exemplo
Esse exemplo mostra como criar um objeto gcroot na nativo pilha.
// mcpp_gcroot.cpp
// compile with: /clr
#include <vcclr.h>
using namespace System;
class CppClass {
public:
gcroot<String^> str; // can use str as if it were String^
CppClass() {}
};
int main() {
CppClass c;
c.str = gcnew String("hello");
Console::WriteLine( c.str ); // no cast required
}
hello
Esse exemplo mostra como criar um objeto gcroot no heap nativa.
// mcpp_gcroot_2.cpp
// compile with: /clr
// compile with: /clr
#include <vcclr.h>
using namespace System;
struct CppClass {
gcroot<String ^> * str;
CppClass() : str(new gcroot<String ^>) {}
~CppClass() { delete str; }
};
int main() {
CppClass c;
*c.str = gcnew String("hello");
Console::WriteLine( *c.str );
}
hello
Esse exemplo mostra como gcroot para manter referências a tipos de valor (não tipos de referência) em um tipo nativo usando gcroot no tipo de processador in a box.
// mcpp_gcroot_3.cpp
// compile with: /clr
#include < vcclr.h >
using namespace System;
public value struct V {
String^ str;
};
class Native {
public:
gcroot< V^ > v_handle;
};
int main() {
Native native;
V v;
native.v_handle = v;
native.v_handle->str = "Hello";
Console::WriteLine("String in V: {0}", native.v_handle->str);
}
String in V: Hello