La question dit que vous utilisez Managed C++, et les balises que vous utilisez C++/CLI (disponible dans VS 2005 ou plus tard). Vous aurez probablement moins de confusion avec C++/CLI.
Si c'est ce que vous utilisez, il y a deux façons de "traduire" depuis C#. Supposons que vous ayez une C#:
// Construct
MyClass c = new MyClass();
// Call some method
c.MyMethod();
Console.Writeline(c); // will call ToString on MyClass
// Finished with it
c.Dispose();
Vous pouvez écrire en C++/CLI comme ceci:
MyClass ^c = gcnew MyClass;
// Call some method
c->MyMethod();
Console.Writeline(c); // will call ToString on MyClass
// Finished with it
c->Dispose();
La c
variable est appelée une "poignée", pas un pointeur, a déclaré avec^au lieu de *. Nous devons également utiliser gcnew
au lieu de new
. C'est la même chose qu'une variable de référence en C#, et est analogue (mais pas identique) à un pointeur en C++, donc nous utilisons ->
pour accéder aux membres.
Ou vous pouvez l'écrire comme ceci:
// Create with local scope
MyClass c;
// Call some method
c.MyMethod();
Console.Writeline(%c); // will call ToString on MyClass (note the %)
La première chose à noter: nous déclarons dans le style de la variable C un local. Il n'y a pas besoin d'explicitement gcnew
l'objet. Deuxièmement, nous traitons l'objet comme s'il s'agissait d'une variable locale (ou d'une référence C++ à une telle variable). Donc nous utilisons. au lieu de ->
. Troisièmement, nous pouvons "convertir" cet objet local en un handle, en le préfixant avec %
, qui agit comme l'équivalent .NET de &
que nous utilisons avec des pointeurs ordinaires. Cela signifie "prenez l'adresse de" ou "donnez-moi un coup de main" à un objet. Enfin, nous ne devons pas appeler Dispose
sur l'objet. Le compilateur fait cela pour nous à la fin de la portée dans laquelle nous l'avons déclaré, car la méthode Dispose
est le mécanisme par lequel les destructeurs sont implémentés en C++/CLI.
Pourriez-vous ajouter un extrait de code pour montrer ce que vous voulez dire un peu plus clairement? – mikelong
Veuillez supprimer la balise C# .net. – mikelong
C# retiré des étiquettes. Question suivante: est-ce C++ géré (comme dans le texte de la question) ou C++/CLI (comme dans les balises)? Ils sont deux choses complètement différentes et changent totalement l'interprétation de la question. –