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

ASP.NET Discussion :

Impossible d’appeler une DLL VB6 en ASP.NET


Sujet :

ASP.NET

  1. #1
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut Impossible d’appeler une DLL VB6 en ASP.NET
    Bonjour

    Je dois utiliser une DLL (objet COM je suppose) écrite en VB6 dont je n’ai pas le source dans une Webform en .NET, version 2.

    Dans mon projet Web, j’ai ajouté une référence COM en sélectionnant la Dll qui se nomme « Cryptage.dll ».

    Dans ma WebForm j’ai mis : " AspCompat="true" dans <@ Page . . . %>

    Dans l’événement Page_Load de ma page je fais appel a une méthode de ma DLL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    string sChaine_a_crypter = "C’est Super";
    string sResult = "" ;
     
    Cryptage.myClass oCrypte = new Cryptage.myClass();
    sResult  = oCrypte.Encryptage(ref sChaine_a_crypter);

    Cependant lors de l’execution de la ligne d’instanciation de la classe Cryptage.myClass();

    J’ai le plantage suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    System.Runtime.InteropServices.COMException (0x80040154): La récupération de la fabrique de classe COM pour le composant avec le CLSID {D47E0DF7-C9BF-11D3-8D59-00C04FA2EC9D} a échoué en raison de l'erreur suivante : 80040154.
       à Frm_aap4x4_A_attestation.Page_Load(Object sender, EventArgs e) dans d:\3wCgo\A__fra\Dev\Dev_A_fr\Frm_aap4x4\A_attestation.aspx.cs:ligne 33
       à System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       à System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       à System.Web.UI.Control.OnLoad(EventArgs e)
       à A_Page.OnLoad(EventArgs e) dans d:\3wCgo\A__fra\Dev\Dev_A_fr\App_Code\A_Page.cs:ligne 120
       à A_Page_aap4x4.OnLoad(EventArgs e) dans d:\3wCgo\A__fra\Dev\Dev_A_fr\App_Code\A_Page-aap4x4.cs:ligne 176
       à System.Web.UI.Control.LoadRecursive()
       à System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
    Si quelqu'un peut m'aider, je l'en remercie d'avance.

    Titan

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 619
    Points
    1 619
    Par défaut
    et c'est quoi l' erreur 80040154?
    En fait tu as un wrappeur qui se crée pour que .Net puisse communiqué avec COM. je pense qu'il faut que tu trouves le bon nom de classe Cryptage.
    je ne l'ai pas fait souvent mais je pense que c'est un truc dans le genre.

  3. #3
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut Objet COM et ASP.NET
    Sinon dois-je enregistrer ma DLL (ou mon objet COM) dans l'assembly.

    J'ai vu des choses comme cela !!!

    Titan

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par titan_33 Voir le message
    Sinon dois-je enregistrer ma DLL (ou mon objet COM) dans l'assembly.
    Dans l'assembly ? non, mais sur le système oui. Le composant est il enregistré sur le système ? (via la commande regsvr32)

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut
    merci Bluedeep

    Dois-je enregistrer ma DLL avec regsvr32

    Ou bien est-ce fait automatiquement en faisant :
    Dans mon projet Web, j’ai ajouté une référence COM en sélectionnant la Dll qui se nomme « Cryptage.dll ».

    Merci d'avance
    Titan

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par titan_33 Voir le message
    merci Bluedeep

    Dois-je enregistrer ma DLL avec regsvr32

    Ou bien est-ce fait automatiquement en faisant :
    Dans mon projet Web, j’ai ajouté une référence COM en sélectionnant la Dll qui se nomme « Cryptage.dll ».
    Non, tu ne peux exploiter un objet COM non enregistré. Ce n'est pas lié du tout à .Net, c'est le concept même de COM qui implique cela. (de ce point de vue, à l'apparition de .Net, on a tous poussé un "ouf" de soulagement : ce problème d'enregistrement complique énormément les questions de versions de composant, d'utilisation de versions multiples, etc ... on est tous content d'en être débarrassé )

    Dans la pratique, les composants installés via un "installer" (InstallShield, etc ...) sont enregistrés à l'installation; en revanche, si tu mets une DLL sur ton disque elle n'a pas raison de l'être si tu n'es pas passé par une procédure d'installation quelconque; tu dois donc faire l'enregistrement à main avec les commande regsvr32 (ce que fait cette commande est trivial : elle charge la DLL et appelle la fonction RegisterDllServer - idem pour la désinstallation, sauf que dans ce cas, c'est la fonction UnRegisterDllServer qui est appelée )

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  7. #7
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut
    Effectivement les choses ont évolué avec l'enregistrement de la dll via regsvr32.

    Désormais j'ai l'exception suivante lors de l'instanciation de ma classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.Runtime.InteropServices.COMException (0x800AC352):
     La récupération de la fabrique de classe COM pour le composant avec le CLSID 
    {D47E0DF7-C9BF-11D3-8D59-00C04FA2EC9D} a échoué en raison de l'erreur suivante : 800ac352.
    A priori il me manquerait des DLL.

    Je suppose qu'il me manque les DLL de VB6 dont doit dépendre "Cryptage.dll".

    Qu'en penses-tu Bluedeep.

    Merci

    Titan

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par titan_33 Voir le message
    A priori il me manquerait des DLL.
    Je suppose qu'il me manque les DLL de VB6 dont doit dépendre "Cryptage.dll".
    Qu'en penses-tu Bluedeep.
    C'est très possible.

    Maintenant, il faut savoir si les DLLs manquantes sont des DLLs COM ou des DLLs de fonctions.

    Le deuxième cas peut se vérifier simplement en ouvrant ta DLL avec le Dependency Walker.

    Le premier .... aïe.

    Ceci dit, je serais étonné qu'il te manque des DLLs de fonctions, car dans ce cas, lors du chargement de la DLL pour l'enregistrement via regsvr32 tu aurais reçu vraisemblablement un message d'erreur (à moins que ces DLLs soient en late binding - à chargement dynamique, mais dans ce cas elles n'apparaitront pas non plus dans le Dependency Walker .

    Une autre possibilité est que tu ais bien les DLL nécessaires mais que leurs versions soient incorrectes.

    La seule réponse possible se trouve dans la doc associée à ta DLL ... (si elle existe ...)

    EDIT : après un rapide googlage, on constate que :
    - ce code d'erreur n'est pas vraiment courant associé à un problème ODBC
    - il semble associé à un problème de version
    - une bonne partie des liens sur ce code d'erreur sont en japonais !!!

    je te laisse le soin de décortiquer les liens google relatifs
    (recherche avec 0x800ac352)

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  9. #9
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut
    merci à toi Bluedeep pour ton aide précieuse.

    Je pense que je vais pouvoir m'en dépatouiller maintenant.

    A+

    Titan

  10. #10
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    J'ai eut un souci similaire avec une dll dont je ne connaissais pas tres bien la provenance.

    Je ne me rappelle plus tres bien des manip que j'avais pu faire à l'époque mais ma dll s'est transformée de mabibliotheque.dll en interop.mabibliotheque.dll.

    VOila pour l'info tres vague et presque inutile, mais on sait jamais...

  11. #11
    Membre actif Avatar de bartoumi
    Profil pro
    Inscrit en
    Février 2005
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 178
    Points : 205
    Points
    205
    Par défaut
    sans trop lire les autres post

    Cree toi une classe qui faira l'interface entre ton code ASP.NET[c# ou vb.net] et ta dLL (d'ailleur tu t'en fou si ça vien de VB6 ou C++ ou DELPHI7)

    utilise l'attribut [import pour chaque methode.
    I C#

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par bartoumi Voir le message
    sans trop lire les autres post

    Cree toi une classe qui faira l'interface entre ton code ASP.NET[c# ou vb.net] et ta dLL (d'ailleur tu t'en fou si ça vien de VB6 ou C++ ou DELPHI7)
    Et à quoi ça sert de créer une classe d'interface sur un object COM ? sur une DLL de fonctions, ok (sauf que en VB6 cela n'existe pas : le VB6 ne produit que des DLL ActiveX), mais sur une exposition d'objet COM je ne vois pas du tout l'intérêt; en quoi cela règlera-t-il le problème d'instanciation?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

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

Discussions similaires

  1. [Débutant] Stage refonte d'une appli VB6 en ASP.NET
    Par Oxynux dans le forum ASP.NET
    Réponses: 5
    Dernier message: 12/12/2013, 16h54
  2. Comment en VB6 récupérer un ArrayList d'une DLL écrite en VB.Net
    Par BGC_Laurent dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 04/04/2007, 11h08
  3. Réponses: 5
    Dernier message: 16/06/2006, 14h01
  4. Réponses: 9
    Dernier message: 06/04/2006, 18h40
  5. Réponses: 2
    Dernier message: 28/10/2003, 10h55

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