IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

dll ActiveX utilisant une DLL externe


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 59
    Points : 82
    Points
    82
    Par défaut dll ActiveX utilisant une DLL externe
    Bonjour à tous.
    Je me trouve confronté à un problème important, et urgent...

    J'ai développé une DLL ActiveX il y a de cela 3 semaines. Celle-ci charge une DLL externe pour utiliser deux fonctions appelant un progiciel interne.

    Voici comment je déclare les fonctions (exemple pour la première fonction externe):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private Declare Function force_connect Lib "v:\a5\test\dll\api_edit.dll" (ByVal p_user As String, ByVal p_pass As String) As Interger
    Le Code Javascript fait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function callEdinat(id){
       try{
             var obj = new ActiveXObject('EdinatWeb.loader');
             obj.load(id);
       }
      catch(e){
             alert ('exception au chargement: '+ e.message);
       }
    }
    Jusqu'ici ca marchait... et puis on a eut une mise à jour windows... et devinez... une exception se lève. J'ai vérifié c'est au moment de l'appel à la fonction "load" que l'erreur est apparante.
    L'erreur est:
    Fichier introuvable: v:\a5\test\dll\api_edit.dll
    Or celle-ci existe bien...
    J'ai donc tenté de déplacé api_edit.dll dans c: et de recompiler l'ActiveX... même erreur, il ne trouve pas c:\api_edit.dll.

    On dirait que d'un coup on ne peut plus accèder aux disques depuis les DLL ActiveX.

    Note: j'ai bien enregistré EdinatWeb.dll (l'ActiveX) via regsvr32 après un désenregistrement (option /u). J'ai toujours un success pour l'enregistrement.

    Autre solution, puis-je linker statiquement la DLL externe à l'ActiveX ?

    Bref, je suis coincé et c'est urgent... je suis paumé... merci si vous pouvez m'aider.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 59
    Points : 82
    Points
    82
    Par défaut
    Précision, d'autres applications utilise api_edit.dll et cela fonctionne bien... par exemple depuis "Forms" de Oracle.

    Donc la DLL est bonne, pour preuve, ca fonctionnait AVANT la mise à jour Windows.

    C'est la panique ici, à vous les studios

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 59
    Points : 82
    Points
    82
    Par défaut
    Bon...
    C'est une misère mais j'ai trouvé où ca coince. Si ca peut servir à quelqu'un voilà la solution:
    La dernière MAJ de Windows interdit aux ActiveX de chercher une DLL externe via un chemin. Il faut enregistrer les DLL avec regsvr32.
    De ce fait, dans l'appel à "api_edit.dll" ne se fait plus par v:\...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private Declare Function force_connect Lib "v:\a5\test\dll\api_edit.dll" (ByVal p_user As String, ByVal p_pass As String) As Interger
    mais directement : api_edit.dll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private Declare Function force_connect Lib "api_edit.dll" (ByVal p_user As String, ByVal p_pass As String) As Interger
    Donc avec vos DLL faudra faire pareil...

    Ensuite on enregistre l'ActiveX avec regsvr32.

    L'appel à l'ActiveX va donc demander "api_edit.dll" dont le mapping de chemin est dans la base de registre Windows... et ca fonctionne.

    En passant, je vous conseille Dependency Walker qui m'a permis de savoir pouquoi j'avais des LoadLibrary Error lors de mon enregistrement de api_edit.dll. J'ai repérer des DLL liées non trouvées que j'ai dut enregistrer avec regsvr32.

    Voilà, je le pose en Résolu.

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser une DLL externe
    Par Ceddoc dans le forum Débuter
    Réponses: 10
    Dernier message: 13/12/2011, 12h07
  2. Utilisation d'un activex dans une dll mfc
    Par regdobey dans le forum MFC
    Réponses: 2
    Dernier message: 20/11/2008, 13h19
  3. [WD12] utiliser une DLL externe
    Par yann_72 dans le forum WinDev
    Réponses: 8
    Dernier message: 31/07/2008, 09h12
  4. Dll managé utilise une dll non managé
    Par DAMVAL dans le forum C++/CLI
    Réponses: 3
    Dernier message: 28/11/2006, 10h36
  5. Réponses: 7
    Dernier message: 13/01/2005, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo