Bonjour,
je voudrais savoir comment il est possible d'utiliser une bibliotheque de classe écrite en c#.net dans une application vs c++.net.
je sais que c possible mais je ne sais pas comment.
merci
fabien
Bonjour,
je voudrais savoir comment il est possible d'utiliser une bibliotheque de classe écrite en c#.net dans une application vs c++.net.
je sais que c possible mais je ne sais pas comment.
merci
fabien
De la même manière que tu integres tes librairies dans un projet C#. En fait avec .NET c'est un peu l'aspect qui change ( A savoir le language que tu utilises importe peu) mais au final le résultat est le même. Puisque le compilateur génerera dans tous les cas un CLR (Pseudo langage de base).
Donc ex :
Un projet C# : ClassLibrary1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 using System; namespace ClassLibrary1 { /// <summary> /// Description résumée de Class1. /// </summary> public class Class1 { public Class1() { } public void Test () { System.Console.WriteLine( "Class1::Test [Calling]" ); } } }
Un projet C++ : ClassTest
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include "stdafx.h" #using <mscorlib.dll> #using <ClassLibrary1.dll> #include <tchar.h> #include <stdio.h> using namespace System; // Il s'agit du point d'entrée pour cette application int _tmain(void) { Console::WriteLine(S"Hello World"); ClassLibrary1::Class1 * pClasse1 = new ClassLibrary1::Class1(); pClasse1->Test(); return 0; }
Important :
Pour que ça ne plante pas, il faut imperativement que : La dll "ClassLibrary1.dll" soit :
- dans le même répertoire que l'exécutable
- Ou dans le repertoire FrameWork (ex:C:\WINNT\Microsoft.NET\Framework\v1.0.3705)
- Ou dans le rep System32.
Enfin dans un chemin valide défini dans le path de WIndows. Pour quelle soit linkée au départ.
Il y a une petite subtilité pour le destructeur En C# il faut utilisr la méthode finalize. Et de plus force ton projet à utiliser le mode managed avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part __gc
le probleme c que le projet n'est pas managé; cela pose-t-il un gros probléme?
Je n'ai pas compris ce que tu voulais dire pour la methode finalize?cela ne concerne que le code c# ?
merci
fabien
Je pense que oui. Renseignes toi sur le forum Développement DotNet.
http://213.186.40.31/forums/viewforum.php?f=49
Ils(elles) sont beaucoup plus califié(es)
sinon :
http://www.dotnet-fr.org/documents/andymc_csharp_faq_fr.html#3.5
Je te remercie grandement pour ton aide
Cordialement
Fabien
J' ai un autre petit probleme, qui vient sans doute du fait que mon code c++ ne soit pas managé, lorsque j'ajoute les directive suivante :
l'erreur est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #using <mscorlib.dll> #using <ClassLibrary1.dll>
Je ne sais pas ce qu'est l'option /clr
Code : Sélectionner tout - Visualiser dans une fenêtre à part fatal error C1190: le code cible managé requiert '#using <mscorlib.dll>' et l'option '/clr'
fabien
après utilisesPour définir cette option du compilateur dans l'environnement de développement Visual Studio
Ouvrez la boîte de dialogue Pages de propriétés du projet. Pour plus d'informations, consultez Définition des propriétés de projets Visual C++.
Cliquez sur le dossier Propriétés de configuration.
Cliquez sur la page de propriétés Général.
Modifiez la propriété Compilation comme code managé.
Pour obtenir des informations sur la façon d'indiquer que vous voulez créer un module, consultez /NOASSEMBLY.
Pour désactivé partiellement le management.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #pragma managed #pragma unmanaged
j'y suis presque arrivé,
compilation + edition de lien ok, mais a l'execution ca plante si je fais simplement
par contre l'editeur reconnait tres bien la classe et lorsque je fait simplement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ClassLibrary1::Class1* pClass1; pClass1 = new ClassLibrary1::Class1() ;
La ca marche .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3ClassLibrary1::Class1* pClass1; // pClass1 = new ClassLibrary1::Class1() ;
Le message d'erreur qu'il me donne est :
Je sens que j'y suis presque ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ne exception non gérée du type 'System.IO.FileNotFoundException' s'est produite dans Module inconnu. Informations supplémentaires : Le fichier ou l'assembly nommé ClassLibrary1, ou l'une de ses dépendances, est introuvable.
Je suis sur que tu vas pouvoir m'aider![]()
Comme l'a indiqué à juste titre Zebiloute , as-tu déclaré les pragma managed et unmanaged avant le bloc de code posant problème ??La ca marche .
Le message d'erreur qu'il me donne est :
oui je l'ai bien fait,
le pire c que j'ai fait foonctioné l'exemple de zebiloute !
Mais avec mon code et les #pragma en plus ca ne marche pas !
Peut être le problème vient-il du fait que le projet est basé sur les MFC ??
Cela m'embete franchement
fabien
Est-ce que tu as vérifié ce point : Par ce que généralement ce genre de message apparît quand le framework ne peut pas accéder à une dll.
Important :
Pour que ça ne plante pas, il faut imperativement que : La dll "ClassLibrary1.dll" soit :
- dans le même répertoire que l'exécutable
- Ou dans le repertoire FrameWork (ex:C:\WINNT\Microsoft.NET\Framework\v1.0.3705)
- Ou dans le rep System32.
Yeappeah , je sui vraiment un co*,
j'avais bien mis la dll dans le repertoire de source,(compilation edition de lien ok), mais pas dans le répertoire de l'executable.
C bon ca marche tres bien.
Je te remercie bcp zebiloute ainsi que tout les autres qui m'ont aider.
Tu m'aides a sauver la face devant mes boss![]()
![]()
fabien
PS : Peut-etre faudrait-t-il mettre ce sujet dans la FAQ pour permettre a d'autre utilisateur d'en profiter.
Partager