Lier un contrôle activeX [Résolu]

Signaler
Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
Je viens de créer une application MFC avec un contrôle activeX
(FlexGrid), tout marche très bien sur mon PC mais dès que je l'exécute
sur un autre PC (qui n'a pas VC++) impossible de charger les controles
FlexGrid. Peut on les liers à l'exe?

merci d'avance

5 réponses

Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Non les controles ActiveX se trouvent sous forme de DLL (de OCX plus précisément), il faut donc les distribuer avec le programme.

Dans ce cas, une seule solution (si tu veut un boulot propre) : un installateur.
Essaie InstallShield ou NSIS (mon préféré) pour livrer tous les OCX dont tu as besoin et effectuer les DllRegisterServer pour les rendre utilisables avec COM.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Je ne programme pas avec les MFC mais je pense que le principe est le même. Pour savoir si un Activex est déjà enregistré ou non, il suffit d'appeler la fonction CoCreateInstance() comme ceci:
IUnknown* pUnk;
HRESULT  res=CoCreateInstance(CLSID_COMPOSANT,0,CLSCTX_ALL,IID_IUnknown,(void**)&pUnk);
if(res==S_OK) ... le composant est enregistré. Libérer l'interface IUnknown  pUnk->Release();
if(res==REGDB_E_CLASSNOTREG) ... composant non enregistré. Il faudra donc l'enregistrer.
Le premier paramètre de CoCreateInstance() est le CLSID du composant dont on veut tester la présence dans la liste des Activex enregistrés.
Je pense que le code est facilement adaptable aux MFC.
Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
7
Si l'application est partagé sur un résaux est-il possible de partager en même temps la DLL? ou faut-il que la DLL soit dans les fichiers systèmes de l'ordinateur sur lequel il s'exécute?
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Il faut qu'elle soit (je pense) ou dans le répertoire de l'executable, ou dans les fichiers systèmes (%WINDIR%\system32\).
Messages postés
192
Date d'inscription
dimanche 16 janvier 2005
Statut
Membre
Dernière intervention
28 février 2011
7
En effet cela marche même si la DLL est dans le dossier de l'EXE mais il faut que l'enregistrement de la DLL se fasse depuis le pc qui l'exécute.
J'ai donc choisi de mettre la DLL dans le même dossier que l'EXE et d'enregistrer le DLL a chaque lancement du programme. Le seul problème est qu'a chaque lancement le système informe que l'enregistrement de la DLL c'est bien effectué et ce même si elle était déja enregistrer.
C'est la seule solution que j'ai trouvé pour pouvoir exécuté le logiciel depuis n'importe quel ordinateur ( a partir d'une clef usb) mais si quelqu'un sait comment enlevé le message ou tester avant si la DLL est déja enregistrer je le remercie de me donner la solution.