Comment communiquer avec une dll c++ [C#] [Résolu] - C#/.NET managed - Programmation
Marsh Posté le 13-02-2007 à 15:37:56
Du côté du marshaling, et aussi sur codeproject, y'a des articles sur le mix de managed c++ et unmanaged c++.
Marsh Posté le 13-02-2007 à 15:42:06
ReplyMarsh Posté le 13-02-2007 à 15:42:31
et plus généralement
http://www.codeproject.com/info/se [...] 3+Feb+2007
Marsh Posté le 13-02-2007 à 18:05:17
En fait j'ai encore pas mal de questions...
Tous les exemples que j'ai pu voir jusqu'à présent appellent des fonctions déclarées static, du genre:
Code :
|
Sauf que je cherche à accéder à des classes et à leurs méthodes, qui sont en outre déclarées dans un namespace.
Quelle est la syntaxe pour cela?
Marsh Posté le 14-02-2007 à 11:43:00
ReplyMarsh Posté le 14-02-2007 à 14:22:21
Si si ... c'est pas très dur à faire, juste un poil à comprendre, et encore.
En t'y penchant sérieusement, en 1h t'as codé un programme d'exemple et t'as tout compris.
Marsh Posté le 17-02-2007 à 11:44:21
Bon voila ce que j'ai fait:
Sous Visual Studio je crée un projet "UnManaged" (VC++) où j'ai la classe suivante:
Code :
|
qui hérite de la classe Application provenant de la lib du moteur ("Engine.lib" ).
J'ai ensuite un projet "Managed" V(C++) avec la classe:
Code :
|
Et enfin le projet C# "Editor" où j'ai les déclaration suivantes:
Code :
|
Problème: au lancement du programme, une exception System.IO.FileNotFoundException est lancée dans le try(); et le programme ne passe ni dans le constructeur de la classe EditorWindow ni dans le catch() : je n'ai pas de message dans l'OutputWindow!
En fait rien que la déclaration "private ManagedEditor EditorApplication;" déclenche le lancement de cette exception.
Qu'est-ce qui se passe?
Marsh Posté le 17-02-2007 à 11:52:54
Si ça peut aider, quand la classe UnManagedEditor n'hérite pas d'Application, le programme se lance correctement. Donc ça vient peut-être du constructeur de la classe Application...qui est comme ceci:
Code :
|
Non?
Marsh Posté le 18-11-2009 à 23:32:09
[Update: Finalement j'ai réussi à faire marcher le moteur au sein de l'éditeur avec une couche unmanged, une managed, et une en C#, ça marchait bien mais c'était lourd en wrappers en tous genres]
Bref, depuis deux ans l'éditeur n'a pas bougé alors que le moteur a profondément changé. Maintenant je m'apprête à refondre tout le code de l'éditeur.
Donc j'ai toujours en tête ces questions:
- est-ce qu'il n'y a pas un moyen de directement communiquer entre code en unmanaged C++ (dll ou lib du moteur) et code C# (utile surtout pour la gestion de l'interface)? Je suis vraiment obligé de me taper une couche en managed?
- actuellement, toutes les conversions de types (genre std::string vers String C#) sont faites dans la couche de Managed C++. Est-ce qu'il existe des moyens plus simples pour convertir d'un type à l'autre? Et si j'ai une classe Vector3, Matrix4x4 etc. dans mon moteur, est-ce que je ne peux pas directement l'utiliser en C#?
Merci.
Marsh Posté le 13-02-2007 à 15:36:24
Bonjour,
Je crée un éditeur de jeu en c# qui doit s'appuyer sur un moteur écrit en c++. Comment est-ce que je peux lier la dll du moteur avec mon projet c#, et communiquer avec?
C'est sans doute une question assez courante mais après pas mal de recherches sur le web je ne trouve pas de réponse satisfaisante...
Est-ce que vous pourriez me donner des liens vers des tutoriels ou des exemples de code pour cela?
Merci d'avance!
Message édité par akalash47 le 19-11-2009 à 23:35:55