2010-04-21 7 views
5

J'ai besoin d'accéder au code dans une DLL C++ native dans un code C#, mais j'ai des problèmes pour trouver le marshaling. Je l'ai déjà fait avec du code C, mais il semble que ce ne soit pas directement possible avec les classes C++. Fait encore plus compliqué par le fait que beaucoup de classes contiennent des fonctions virtuelles ou intégrées. J'ai même essayé de passer les en-têtes à travers le PInvoke Interop Assistant, mais ça étoufferait à peu près tout et pas vraiment quoi faire ... Je devine parce que ce n'est pas vraiment supporté.Marshal une classe C++ à C#

Alors, comment, si possible, vous pouvez utiliser une DLL de classe C++ native à partir du code .NET. Si je dois utiliser un intermédiaire (CLR C++?) C'est bien.

Répondre

9

Il n'y a vraiment pas de moyen facile de le faire en C# - je recommande de faire une couche wrapper simple en C++/CLI qui expose les classes C++ en classes .NET.

It is possible to use P/Invoke and lots of cleverness to call C++ virtual methods, mais je n'irais pas dans cette route à moins que vous n'ayez vraiment eu aucun autre choix.

+0

Très bonne réponse. Mieux que de résoudre strictement la question ("Comment marshall ...?") Est de résoudre le * besoin * réel de l'OP. – pyon

0

Vous pourriez jeter un oeil à SWIG, si rien d'autre, juste pour voir comment ils gèrent le code de base wrapper (que SWIG génère). Je ne connais presque rien à propos des liaisons de code natives C# donc je ne peux pas juger si leur approche est bonne, mais ils font un travail décent avec certaines des autres liaisons de langage.

Questions connexes