[MC++] gcroot, dll en c#, code en c++

gcroot, dll en c#, code en c++ [MC++] - C#/.NET managed - Programmation

Marsh Posté le 13-04-2006 à 10:41:13    

Bonjour à tous. Je cherche de l'aide sur gcroot et en général sur le mélange code managed / code unmanaged.
 
En gros j'ai une dll codée en C# que je veux utiliser dans du code C++.
Je fais donc un  
 

Code :
  1. #using <toto.dll>
  2. using namespace toto::titi;


 
J'ai lu que pour utiliser une variable managed dans du code unmanaged, il fallait utiliser le wrapper gcroot, aussi je fais donc ce genre d'opération :
 

Code :
  1. gcroot<Foobar*> fb = new Foobar();


avec Foobar une classe managed de la dll C#.
 
Et j'ai même un conteneur, un

Code :
  1. std::vector< gcroot<Foobar*> >


 
 
Mais voilà j'aimerai savoir comment bien me servir de gcroot... c'est juste pour déclarer des variables (on dirait vu la MSDN) ou alors gcroot<Blop*> devient carrément le nouveau type avec lequel on travaille (je mets quoi comme type retourné par mes fonctions ?)
 
Et si mon conteneur doit stocker des instances de classes héritées de Foobar, je fais quoi quand je sors mon Foobar* du conteneur ? dynamic_cast ? Parce que en gros ca compile un peu dans tous les cas mais à l'exécution j'ai des "null reference" / "null pointer" et autre variante, sans trop pouvoir débugger facilement... gcroot perturbe pas mal le système de typage on dirait :/
 
 
 
Donc si quelqu'un a une explication claire sur comment gérer une collection d'objets managed dans du code unmanaged, je suis preneur  :bounce:  
 
J'ai bien quelques liens sur le sujet, mais tous s'arrêtent au cas des String, personne ne fait de polymorphisme  [:ruisseau de larmes] :
http://www.codetools.com/managedcp [...] print=true
http://www.codeguru.com/csharp/.ne [...] php/c4849/
http://www.codeguru.com/cpp/cpp/cp [...] php/c6867/
 
 
 
 
Merci de toute l'aide que vous pourrez me filer  :jap:


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 13-04-2006 à 10:41:13   

Reply

Marsh Posté le 13-04-2006 à 14:06:54    

Un wrapper pour planquer du code managed dans du non managed : http://msdn.microsoft.com/msdnmag/issues/05/04/C/
Je sais pas si je trouverai ce que je cherche, mais au moins ca fera un embryon de topic pour d'autres ;)


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 28-04-2006 à 18:41:46    

(Je posterai ce que je découvre au fil du temps ici)
 
gcroot perturbe le compilateur qui connaît le polymorphisme entre un Toto* et un FilsDeToto*, mais pas entre un gcroot<Toto*> et un gcroot<FilsDeToto*>. La solution :
* pour stocker : list_of_toto.push_back(static_cast<Toto*>(pointeur_sur_instance_de_fils_de_toto));
* pour déstocker :
          o Ne marche pas : FilsDeToto* fdt = dynamic_cast< FilsDeToto* >(this->list_of_filters.back());
          o Marche : Toto* t = this->list_of_filters.back(); FilsDeToto* fdt = dynamic_cast< FilsDeToto* >(t);


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed