Bonjour,
J'ai créé une dll en c# qui est censée pouvoir être utilisée par un exécutable écrit en c++ (non managé). D'après ce que j'ai pu lire sur le net il faut pour cela créer une classe COM en C#.
Pour information voici le code de ma classe C# :
Je compile ma classe C# à l'aide des deux commandes suivantes :
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
21
22 using System; using System.Runtime.InteropServices; namespace COMCsharpServerVSProject { [Guid("DBE0E8C4-1C61-41f3-B6A4-4E2F353D3D05")] public interface IManagedInterface { int PrintHi(string name); } [Guid("C6659361-1625-4746-931C-36014B146679")] public class InterfaceImplementation : IManagedInterface { public int PrintHi(string name) { Console.WriteLine("Hello, {0}!", name); return 33; } } }
Csc /target :library COMCsharpServerVSProject.cs
Regasm COMCsharpServerVSProject.dll /tlb :COMCsharpServerVSProject.tlb
Une fois cette compilation effectuée je compile ensuite mon projet C++ avec cette commande (pas de problèmes, aucune erreur de compilation):
cl comclient.cpp
Ensuite je lance le fichier comclient.exe et tout fonctionne parfaitement ! ma dll C# est bien utilisé lors du lancement de comclient.exe !!!
Mon petit problème est que je souhaiterais pouvoir compiler ma classe COMCsharpServerVSProject.cs à partir de visual studio (intégré à un projet) et non en ligne de commande...
Pour tenter de faire cela j'ai créé un projet de type "bibliothèque de classes" et j'ai ensuite mis dans la classe exactement le même code que celui ci-dessus. Une fois compilé cela me crée bien ma dll. J'ai ensuite lancé la commande Regasm COMCsharpServerVSProject.dll /tlb :COMCsharpServerVSProject.tlb afin de creer mon fichier .tlb. Jusque là pas de problèmes... mais lorsque j'essaye de compiler mon projet c++ j'ai droit à de multiples erreurs dont voici le détail :
Il y a donc un problème, je pense que ma classe c# n'est pas compilée comme elle le devrait via visual studio... car la compilation de cette même classe en ligne de commande fonctionne parfaitement.... donc ma question est... comment effectuer le même type de compilation via visual studio 2005 ? quelles sont les éventuelles options à modifier pour arriver au même résultat que la commande Csc /target :library COMCsharpServerVSProject.cs ?D:\TESTS_DEVS\WIN32\COM\COMCsharpServerVSProject\COMCsharpServerVSProject\bin\De
bug>cl comclient.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
comclient.cpp
comclient.cpp(22) : error C2065: 'IManagedInterface' : undeclared identifier
comclient.cpp(22) : error C2065: 'cpi' : undeclared identifier
comclient.cpp(22) : error C2106: '=' : left operand must be l-value
comclient.cpp(27) : error C2065: 'CLSID_InterfaceImplementation' : undeclared id
entifier
comclient.cpp(29) : error C2065: 'IID_IManagedInterface' : undeclared identifier
comclient.cpp(46) : error C2227: left of '->PrintHi' must point to class/struct/
union
comclient.cpp(52) : error C2227: left of '->Release' must point to class/struct/
union
Je précise que j'ai déjà essayé de modifier "inscrire poiur com interop" dans les propriétés de mon projet, sans résultat.
Merci
Partager