IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Probleme creation DLL C# COM


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut Probleme creation DLL C# COM
    Bonjour

    J'essaye dans un projet de test (tutoriel)
    de crée un dll C# pour pouvoir l'utiliser dans un projet C++ suivant le tutoriel suivant :http://www.linux-bsd-central.com/ind...tent/view/278/

    Je crée donc le projet en C# , crée la classe interface et la classe programme.
    Mis le option du projet a "Register for COM interop"
    Signer l'assembly , et mis Assembly COm Visible dans les Assembly information.

    J'ai récupéré le guid présent dans cette fenetre (assembly information)
    et ajouté le tout à mon code

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    namespace DLLCSharp
    {   
        [Guid("e5623cc0-4394-4bb8-8c30-7cc9a732d3f6")]
        [InterfaceType(ComInterfaceType.InterfaceIsDual)]
        public interface IClient
        {
            [DispId(1)]
            int SendMessage(string MessageToSend);
            [DispId(2)]
            string GetMessage(int id);
        }
     
        [ClassInterface(ClassInterfaceType.None)]
        [ProgId("DLLCSharp.Client")]
        [ComSourceInterfaces(typeof(IClient))]
        public class Client:IClient
        {
            string[] Message = new string[256];
            int Cpt = 0;
            public int SendMessage(string MessageToSend)
            {
                string tmp = MessageToSend.ToUpper();
                Message[Cpt++] = tmp;
                return Cpt;
            }
            public string GetMessage(int id)
            {
                return string.Format("{0}:{1}", id, Message[id]);
            }
     
        }
    }
    en compilant la DLL j'ai l'erreur suivante que je ne comprend pas :

    1>c:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(3019,9): error MSB3212: The assembly "C:\Users\Christophe\Documents\CHRISTOPHE\SOFT_DEVELOPPEMENT\MixedDLLC++CSharp\DLLCSharp\bin\Debug\DLLCSharp.dll" could not be converted to a type library. Type library exporter encountered an error while processing 'DLLCSharp.IClient, DLLCSharp'. Error: Élément introuvable.
    Si quelqu'un peut m'aiguiller, je ne vois pas ou chercher et à quel niveau se situe mon erreur.

    Cordialement

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    Bonjour

    Apres quelque recherche sur la toile, il semble que le code du tutoriel soit erroné.
    Voici une méthode qui marche.

    La DLL doit avoir une interface pour les fonctions et une autre pour les evenements.
    Chacune des trois classes doit avoir un guid différent.

    le code est le suivant

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     [Guid("E9AB8D06-E6F9-4c9d-A653-CCE96CFF96E1")]    
        //[InterfaceType(ComInterfaceType.InterfaceIsDual)]    
        public interface IClient
        {
            [DispId(1)]
            int SendAMessage(string MessageToSend);
            [DispId(2)]
            string GetAMessage(int id);
        }
     
        // Events interface Database_COMObjectEvents 
        [Guid("F4D7CA79-A532-4f9d-8876-B2FB909A1478"),
        InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
        public interface IEvents
        {
        }
     
        [Guid("C8251124-3C4B-420b-81CE-35636E4547E9"),
        ClassInterface(ClassInterfaceType.None),    
        ComSourceInterfaces(typeof(IEvents))]
        public class Client:IClient
        {
            string[] Message = new string[256];
            int Cpt = 0;
            public int SendAMessage(string MessageToSend)
            {
                string tmp = MessageToSend.ToUpper();
                Message[Cpt++] = tmp;
                return Cpt;
            }
            public string GetAMessage(int id)
            {
                return string.Format("{0}:{1}", id, Message[id]);
            }
     
        }
    Si les check interopt service et com visible sont mis, au build le fichier tlb est créé

    il ne reste plus qu'a l'importer dans le projet C++ et d'initialiser l'objet COM.
    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
     
    #import "..\DLLCSharp\bin\Debug\DLLCSharp.tlb" 
     
     // Initialize COM.
        HRESULT hr = CoInitialize(NULL);
     
    	// Create the interface pointer.
        IClientPtr pIClient(__uuidof(Client));
        int sendResult;
        BSTR getResult;
     
    	 // Call the DLL
    	CString tmp = "Some message to send";
    	BSTR myBSTR;
    	myBSTR = tmp.AllocSysString();
        pIClient->SendAMessage( myBSTR);
        myBSTR = pIClient->GetAMessage(0);

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme creation dll
    Par devin59 dans le forum C#
    Réponses: 3
    Dernier message: 21/01/2008, 20h54
  2. conteneur de la STL (problème avec DLL et COM)
    Par moldavi dans le forum MFC
    Réponses: 8
    Dernier message: 25/07/2005, 22h43
  3. probleme creation projet
    Par choupinet612 dans le forum XMLRAD
    Réponses: 2
    Dernier message: 05/11/2004, 10h11
  4. [CR] Probleme avec Dll P2oledb.dll
    Par malban dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 30/08/2004, 09h10
  5. creation DLL dev-cpp
    Par gaut dans le forum Dev-C++
    Réponses: 4
    Dernier message: 29/01/2004, 18h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo