J'ai une bibliothèque C++ native/non managée avec un certain nombre de classes que je voudrais utiliser de C#. La plupart des solutions que j'ai lues (comme this one et this one) suggèrent que je devrais créer un wrapper C++/CLI et utiliser le wrapper dans mon projet C#. La plupart de ces suggestions, cependant, ignorent la plate-forme. Pour autant que je sache, si la DLL non-managée est en 32 bits, ma DLL wrapper devra être en 32 bits, ce qui forcera mon projet C# à utiliser la plate-forme x86, même si j'ai 32- et 64- versions binaires de la DLL non managée disponibles. J'ai déjà résolu ce problème avec les API C en utilisant P/Invoke avec LoadLibrary()
et Marshal.GetDelegateForFunctionPointer()
, mais je pense que l'encapsulation de chaque appel de méthode des objets C++ serait sujette aux erreurs et difficile à maintenir. Je ne pense pas que je devrais tenter de découvrir le nom mutilé des exportations dans la DLL C++ non plus. Incidemment, la bibliothèque C++ que j'essaie d'utiliser est la VM JavaScript de Google V8 (http://code.google.com/p/v8/) qui peut être compilée pour x86 ou x64, donc le portage du code source C++ vers C# droit est hors de question. Et oui, je suis au courant de plusieurs projets existants qui enveloppent V8 pour une utilisation avec du code managé, tels que v8sharp (http://v8sharp.codeplex.com/) et Javascript .NET (http://javascriptdotnet.codeplex.com/). Cependant, à ma connaissance, tous utilisent un wrapper C++/CLI spécifique à la plate-forme. Pour interopérer avec d'autres bibliothèques de code managé, j'ai besoin de mon composant de code managé pour utiliser AnyCPU.Comment utiliser une classe C++ dans une application C# sans tenir compte de la plateforme?
Existe-t-il un bon moyen d'y parvenir?
La seule chose qui me vient à l'esprit est peut-être un wrapper COM ... – CodingGorilla
@Coding Gorilla - Cependant, le COM back-end aura probablement besoin de cibler x86 ou x64 (je le fais, mais ce n'est toujours pas gratuit "n'importe quel CPU"). –
@ user166390 - Oui, je pensais que je n'y pensais pas trop, c'est pourquoi je lui ai laissé un commentaire plutôt qu'une réponse :) – CodingGorilla