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