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 :
Mon programme est lancé avec les droits administrateurs, donc ma dll s'enregistre bien dans le registre.
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) { } }
Mais problème, une exception est levée sur le EndInit() :
Savez-vous pourquoi cela ne marche pas ?Classe non enregistrée (Exception de HRESULT : 0x80040154 (REGDB_E_CLASSNOTREG))
Merci beaucoup
Partager