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 :

CLient COM .Net pour Serveur COM OutProc en C++ VS6


Sujet :

C#

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Ao�t 2004
    Messages
    6
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2004
    Messages : 6
    Par d�faut CLient COM .Net pour Serveur COM OutProc en C++ VS6
    Bonjour

    J'ai cherch� sur le forum et je n'ai malheuresementpas pu trouv� r�ponse � ma question, de m�me que sur le reste du web, j'espere que ce n'est pas faute d'avoir chercher, si c'est le cas je m'en excuse.

    Alors voila mon probleme :

    Ce que je veut faire en fait c'est de cr�er un client (COM) en .Net qui permet de se connecter sur un serveur COM ex�cutable (outproc) d�velopp� en C++ VS 6, pour pouvoir b�n�ficier des m�thodes fournies par les interfaces COM.

    Pourriez vous m'�clairez sur ce point s'il vous pla�t ?

    Il y a une Interface et deux m�thodes disponible par le serveur COM ... voici le fichier idl utilis� pour g�n�rer la dll Proxy.dll :

    import "unknwn.idl";

    //-------------------------------------------- Interfaces Definition
    [ object,
    uuid(101DD6E9-78C9-42c2-99A3-AE1B6B56C078),
    pointer_default(ref)
    ]
    interface ITestInterface : IUnknown
    {
    HRESULT TestMethod([in] int x,[in] int y);
    HRESULT TestCall();
    }


    //-------------------------------------------- COM Object

    [
    uuid(826D4EC6-B49B-4baa-BCC7-E10ADCBB81B7),
    version(1.0),
    helpstring("Test Connection point")
    ]
    library RASTACOMServerLib
    {
    importlib("stdole32.tlb");
    [uuid(6166C4FE-7247-4781-B065-A6B1984F6C64)]
    coclass RASTACOMObject
    {
    [default] interface ITestInterface;
    }
    }
    j'ai cru comprendre quelque part qu'il faut utilsi� MarshalAs .. mais je sais pas o� .. dans le fichier idl ? inclure cela dans le client .Net ? comment appeler les m�thodes qui sont interfac�es au sein du code .NEt ?

    Merci a ucas o� vous avait lu jusqu'� la fin

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par d�faut COM en .Net...
    Bonjour,

    d�j�, pour utiliser le serveur COM (outproc) en .Net, il va falloir cr�er un "mapping" permettant l'utilisation de ce composant COM depuis une assembly .Net. Pour se faire, il faut ajouter la r�f�rence de l'objet COM dans le projet .Net.

    Pour que l'assembly soit utilisable en COM, il faudra, dans les propri�t�s de cette assembly, activer l'option "Inscrire pour COM Interop".

    Cordialement.

    Guillaume MARQUES

  3. #3
    Nouveau membre du Club
    Inscrit en
    Ao�t 2004
    Messages
    6
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2004
    Messages : 6
    Par d�faut
    Merci pour la r�ponse... qu'est ce que tu veut dire par "Pour que l'assembly soit utilisable en COM, il faudra, dans les propri�t�s de cette assembly, activer l'option "Inscrire pour COM Interop"." .. d'un point de vue code ?

    Entre temps (pendant le week end) j'ai pu avancer grace au Tutorial pr�sent dans msdn :
    http://msdn2.microsoft.com/en-US/lib...36(VS.71).aspx
    qui d�crit comment cr�er un cleint .net d'un objet com, soit par la m�thode simple de conversion de dll par tlbimp, soit par mappage manuel de l'interface COM chez le client .Net

    Vous me direz mais qu'est ce que tu fai encore sur le forum si t'a deja la r�ponse ? :p et ben voyez vous j'ai toujour un probl�me ... en effet lors de la g�n�ration puis de l'execution, j'obtiens un p�pein au niveau de l'instruction :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ProxyLib.ITestInterface mc = (ProxyLib.ITestInterface) bridger;
    qui est sens�e etre l'equivalent de QueryInterface pour l'interface ITestInterface, le systeme me notifie l'exception :
    Le cast sp�cifi� n'est pas valide.

    JE vous met tout le code vu qu'il est petit :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    // client dont net pour serveur COM
     
    using System;
    using System.Runtime.InteropServices;
     
    namespace ProxyLib 
    // declaration de l'itnerface com ...
    {
    	[ComVisible(true), ComImport,
    	Guid("56A868B1-0AD4-11CE-B03A-0020AF0BA770"), 
    	InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] 
    	internal interface ITestInterface
    	{ 	
    		void TestMethod([In] int x,[In] int y);
     
    		void TestCall();
    	}
     
    	[ComImport, Guid("6166C4FE-7247-4781-B065-A6B1984F6C64")] 
    	class ZSIBridge 	
    	{ 
     
    	}
    }
     
    class MainClass 
    { 
    	public static void Main(string[] args) 
    	{ 
     
    		// Crée l'instance de GSIBridge 
    		// (appelle CoCreateInstance(6166C4FE-7247-4781-B065-A6B1984F6C64, 
    		//  NULL, CLSCTX_ALL, IID_IUnknown, 
    		//  &bridger).):
    		try
    		{
    			ProxyLib.ZSIBridge bridger =
    				new ProxyLib.ZSIBridge();
     
    			// QueryInterface pour l'interface ITestInterface :
    			ProxyLib.ITestInterface mc = (ProxyLib.ITestInterface) bridger;
     
    			// Appelle des méthodes sur l'interface COM.
    		//	mc.TestMethod(3,4); 
    		//	mc.TestRPCg2();
    		}
    		catch(Exception ex)
    		{
    			Console.WriteLine("Exception COM inattendue : " + ex.Message);
    		}
    		Console.WriteLine("no exceptions .. ? ");
    		// Attend la fin de l'exécution. 
    		Console.WriteLine("Appuyez sur ENTRÉE pour continuer."); 
    		Console.ReadLine();
    	}
    }

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par d�faut
    Bonjour,

    dans les propri�t�s du PROJET (dans Visual Studio) il faut activer l'option "Inscrire pour COM Interop" ce qui r�alisera l'exportation des interfaces .Net vers un fichier tlb utilisable en C++ / VB etc...

    Est-ce que l'objet de type ProxyLib.ZSIBridge impl�mente bien l'interface ITestInterface ?

    Il faut peut-�tre d'ailleurs pr�f�rer l'instruction as (ou is) � un cast.

    Cordialement

  5. #5
    Nouveau membre du Club
    Inscrit en
    Ao�t 2004
    Messages
    6
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2004
    Messages : 6
    Par d�faut
    j'ai modifi� le code pour faire avec le as :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    			object bridger = null;
    			bridger = new ProxyLib.ZSIBridge();
     
    			// QueryInterface pour l'interface ITestInterface :
    			//ProxyLib.ITestInterface mc = (ProxyLib.ITestInterface) bridger;
    			ProxyLib.ITestInterface mc = null;
    			mc = bridger as ProxyLib.ITestInterface;
     
    			// Appelle des méthodes sur l'interface COM.
    		//	mc.TestMethod(3,4); 
    			mc.TestRPCg2();
    et il ne me sort plus l'erreur pour la ligne

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     mc = bridger as ProxyLib.ITestInterface;
    mais plutot lors de l'appe lde m�thode : l'exception envoy�e est :
    "La r�f�rence d'objet n'est pas d�finie � une instance
    d'un objet."
    PS :
    J'ai essay� de changer le parametre "Inscrire Pour COM Interop" dans les propri�t�s du projet et bien que j'ai trouv� le champs en question il ne veut pas changer (il est en gris ...).
    et ee merci pour l'aide

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Par d�faut Plom Plom Plom Plom...
    Si l'objet mc est � null une fois que tu es pass� sur l'instruction

    [FONT=monospace][/FONT]mc = bridger as ProxyLib.ITestInterface;

    c'est dans ce cas que ta classe ProxyLib.ZSIBridge(); ne doit pas impl�menter l'interface ITestInterface...

    Peux-tu donner le code complet de la classe ProxyLib.ZSIBridge()...

    Merci d'avance.

    De plus il faudrait que tu modifies ton code comme ci-dessous:

    ProxyLib.ZSIBridge bridger = null;
    bridger = new ProxyLib.ZSIBridge();
    // QueryInterface pour l'interface ITestInterface :
    //ProxyLib.ITestInterface mc = (ProxyLib.ITestInterface) bridger;
    ProxyLib.ITestInterface mc = null;
    mc = bridger as ProxyLib.ITestInterface;

    // Appelle des m�thodes sur l'interface COM.
    // mc.TestMethod(3,4);
    mc.TestRPCg2();

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 27/01/2012, 18h33
  2. R�ponses: 1
    Dernier message: 22/12/2009, 14h06
  3. R�ponses: 1
    Dernier message: 02/10/2007, 10h38
  4. passer une chaine de caract�re entre client et serveur COM
    Par ali.ensi dans le forum Visual C++
    R�ponses: 7
    Dernier message: 28/03/2007, 17h30
  5. Reference COM, .Net pour projet VB
    Par kaskarot dans le forum VB.NET
    R�ponses: 2
    Dernier message: 05/01/2007, 16h23

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