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 :

[ActiveX] Instancier un ActiveX MapPoint


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Points : 64
    Points
    64
    Par défaut [ActiveX] Instancier un ActiveX MapPoint
    Bonjour à tous,

    Je souhaiterais instancier une ActiveX MapPoint par réflection. Je m'explique :

    Lorsque je déplace mon ActiveX MapPoint sur ma Form, deux Dll sont référencées automatiquement dans mon projet : AxInterop.MapPoint.dll et Interop.MapPoint.dll.
    Après m'être renseigné, j'ai compris que la première Dll comportait mon ActiveX et que la deuxième était un Wrapper permettant d'intéragir avec lui.

    Mais pour des raisons diverses, je veux créer mon ActiveX par code et ne pas référencer de Dll, ou du moins seulement le Wrapper.

    Voilà comment j'ai procédé pour le moment :

    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
     
        public MappointForm()
        {      
          InitializeComponent();
          AxMappointControl control;
          Process.Start("regsvr32.exe", @"C:\Program Files\Microsoft MapPoint Europe 2009\MappointControl.ocx");
          Type mappointControlType = Type.GetTypeFromProgID("MapPoint.Application.EU");
          control = new AxMappointControl(mappointControlType.GUID.ToString());
          ((ISupportInitialize)(control)).BeginInit();
          control.Dock = DockStyle.Fill;
          control.Name = "mpControl";
          control.TabIndex = 0;
          this.Controls.Add(control);
          ((ISupportInitialize)(control)).EndInit();
        }
     
      public class AxMappointControl : AxHost
      {
        public AxMappointControl(string strCLSID)
          : base(strCLSID)
        {
        }
      }
    Mon programme est lancé avec les droits administrateurs, donc ma dll s'enregistre bien dans le registre.

    Mais problème, une exception est levée sur le EndInit() :
    Classe non enregistrée (Exception de HRESULT : 0x80040154 (REGDB_E_CLASSNOTREG))
    Savez-vous pourquoi cela ne marche pas ?

    Merci beaucoup

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Points : 64
    Points
    64
    Par défaut
    Personne ne voit comment régler mon problème ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour,
    J'ai le meme problème et ne trouve aucune reponse...

    Quelqu'un aurait une solution ?

    Merci a tous.

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Si tu t'autorises la dll d'interop comme le premier post le signale, tu peux peut-être t'en sortir ainsi :

    Code c# : 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
          Assembly ass = Assembly.LoadFrom(@"C:\monCheminVersMaDllDInterop\AxInterop.MapPoint.dll");
          AxHost ocx;
          ConstructorInfo ctrInfo;
     
          if (ass != null)
              foreach (Type type in ass.GetTypes()) {
                if (type.IsSubclassOf(typeof(AxHost))) {
                  ctrInfo = type.GetConstructor(Type.EmptyTypes);
                  if (ctrInfo != null) {
                    ocx = (AxHost)ctrInfo.Invoke(null);
                    if (ocx != null) {
                      ocx.Dock = DockStyle.Fill;
                      this.Controls.Add(ocx);
                    }
                  }
                }
              }

Discussions similaires

  1. Problème composant .Net pour ActiveX, Net to ActiveX
    Par mdelsinne dans le forum Développement Windows
    Réponses: 2
    Dernier message: 13/07/2011, 16h46
  2. Impossible d'instancier mon ActiveX
    Par premiumbfd dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 24/09/2010, 12h33
  3. [vb6][activeX][excel] l'activeX ne fonctionne pas
    Par totof39 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/01/2006, 12h32
  4. Instanciation dynamique d'ActiveX
    Par cathar_rhythm dans le forum MFC
    Réponses: 12
    Dernier message: 28/06/2005, 08h11
  5. [ActiveX] détecter désactivation activeX
    Par Le Marlou dans le forum Multimédia
    Réponses: 3
    Dernier message: 21/02/2005, 17h27

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