Bien le bonjour à toi, peuple du forum dotNET (qui ne doit plus me voir bien souvent ces derniers temps).
Comme vous pourrez le voir si vous avez la curiosité de cliquer sur ma signature, je suis en ce moment en train d'écrire un wrapper pour la librairie Irrlicht se servant uniquement des P/Invoke (pour des raisons d'aspect multi-plateforme principalement).
Pour planter le schéma, voilà comment c'est fait :
-Un wrapper en C/C++ réécrit toutes les fonctions de la librairie de base sous la forme :
-Un wrapper en C# appelle tout ça en P/Invoke et patati et patata.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SceneNode_Fonction(void *ptr, ...arguments...) { ((SceneNode)ptr)->fonction(arguments); }
Ensuite pour la communication code natif => code managé, j'ai utilisé des delegates en C# et des callbacks en C... Rien de bien sorcier.
Aujourd'hui je me heurte à un problème de méthode néanmoins :
J'ai dans le code natif des interfaces dont quelqu'un qui utilise la librairie peut hériter (par exemple pour créer ses propres "SceneNodes") et j'aurais besoin de les recopier en C#.
Il faut savoir que ces interfaces possèdent des dizaines de fonctions virtuelles que l'utilisateur peut réécrire (ou non).
Pour faire ça, avant je faisais des callbacks en C... Ca marchait mais comme là j'ai des dizaines de fonctions ça ferait légèrement lourd... De plus se pose un problème dès lors que le code natif comme le code managé peuvent avoir besoin d'accéder à ces fonctions virtuelles (ce n'est pas vraiment un problème mais là encore, ça exige plus de "sale" code).
Je ne pense pas qu'il y ait une méthode "miracle" mais il y aurait-il une "construction" ou une "architecture" qui pourrait me permettre de rendre le tout moins lourd ?
Merci d'avance,
DeusXL
PS : Le sujet est vraiment très ciblé et très précis mais pas très simple à expliquer. Veuillez d'avance m'excuser si ce n'est pas très clair, je tâcherais d'expliquer ce qui est nécessaire.
Partager