Lier un contrôle activeX

Résolu
moumouteb Messages postés 192 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 28 février 2011 - 7 juin 2006 à 12:01
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 8 juin 2006 à 02:45
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

nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
7 juin 2006 à 14:49
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.
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
8 juin 2006 à 02:45
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.
moumouteb Messages postés 192 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 28 février 2011 10
7 juin 2006 à 14:58
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?
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
7 juin 2006 à 15:00
Il faut qu'elle soit (je pense) ou dans le répertoire de l'executable, ou dans les fichiers systèmes (%WINDIR%\system32\).

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
moumouteb Messages postés 192 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 28 février 2011 10
7 juin 2006 à 15:25
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.
Rejoignez-nous