moumouteb
Messages postés192Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention28 février 2011
-
7 juin 2006 à 12:01
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 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?
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 200710 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és1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 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és192Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention28 février 201110 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?
moumouteb
Messages postés192Date d'inscriptiondimanche 16 janvier 2005StatutMembreDernière intervention28 février 201110 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.