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.NET Discussion :

Erreur appel dll dans un projet VB.NET


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 16
    Par défaut Erreur appel dll dans un projet VB.NET
    Bonjour à la communauté.

    Mon problème :
    Je souhaiterai intégrer une dll dans un projet que je développe en VB.NET. Il s'agit d'un projet qui est un plugin ou add-on d'un gros logiciel (Analyst's Notebook). L'idée c'est de faire en sorte que le projet que je développe soit simple à installer (via un fichier batch) sur n'importe quel ordinateur. J'ai déjà fait plusieurs projet de ce type, cependant je n'avais jamais eut à intégrer une dll dans un des projet. Depuis jeudi dernier je bloque sur ce problème.
    La dll en question est "IBM.data.DB2.dll". La dite base DB2 est installée sur un serveur.
    Attendez avant de râler que c'est simple et tout et tout... J'ai fait des recherches et tests avant de poster !

    Les environnements possibles et les erreurs qui en découlent :
    Il y en a 2.
    1. Avec DB2 (express ou pas) installé sur la machine, l'erreur est la suivante : "System.TypeInitializationException : Une exception à été levée par l'initialisateur de type pour [Nom_du_programme] ---> System.BadImageFormatException : Impossible de charger le fichier ou l'assembly 'IBM.Data.DB2, Version=9.0.0.2, Culture=neutral, PublicKey Token=7c307b91aa13d208' ou une de ses dépendances. Tentative de chargement d'un programme de format incorrect.".

    2. Sans DB2 (express ou pas) installé sur la machine, l'erreur est la suivante : "System.TypeInitializationException : Une exception à été levée par l'initialisateur de type pour [Nom_du_programme] ---> System.IO.FileNotFoundException : Impossible de charger le fichier ou l'assembly 'IBM.Data.DB2, Version=9.0.0.2, Culture=neutral, PublicKey Token=7c307b91aa13d208' ou une de ses dépendances. Le fichier spécifié est introuvable.".

    Ce que j'ai essayé de faire :
    Comme pour toute sources externes de données, je l'ai ajouté dans les références du projet --> ça fonctionne très bien sur mon PC mais c'est tout.
    Installer DB2 Express sur les postes clients --> erreur différente sur un poste client, fonctionne sur un autre poste client.

    La structure du dossier que je déploie sur les ordinateurs clients :
    [Mon projet]
    Mon_projet.dll
    install.bat
    IBM.Data.DB2.dll
    2-3 autres fichiers nécessaires pour le plugin.


    Ce que je veux faire :
    Ne pas avoir à installer DB2 sur les postes client.
    Pouvoir intégrer la dll IBM.Data.DB2 dans mon projet.
    Et ne plus avoir ces d'erreurs !!


    Le post est long mais il y a toutes les informations nécessaires.
    Merci d'avance pour l'aide.

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    La batterie est presque vide et je coupe au plus vite.


    Citation Envoyé par Nijin Voir le message
    Bonjour à la communauté.

    1. Avec DB2 (express ou pas) installé sur la machine, l'erreur est la suivante : "System.TypeInitializationException : Une exception à été levée par l'initialisateur de type pour [Nom_du_programme] ---> System.BadImageFormatException : Impossible de charger le fichier ou l'assembly 'IBM.Data.DB2, Version=9.0.0.2, Culture=neutral, PublicKey Token=7c307b91aa13d208' ou une de ses dépendances. Tentative de chargement d'un programme de format incorrect.".


    Le post est long mais il y a toutes les informations nécessaires.
    Merci d'avance pour l'aide.
    C'est le message d'erreur qui me tombe dessus quand j'essaie de mettre une référence à un composant 32 bits uniquement à une solution x64 ou anycpu. Il me faut utiliser une solution 32 bits uniquement (x86)

    En espérant avoir été utile...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 16
    Par défaut
    Bonjour,

    Merci pour votre réponse et désolé pour le délai de réponse...
    J'ai généré la dll de mon projet en anycpu, x64 et x86 respectivement nommée monprojet_anycpu.dll, monprojet_x64 et monprojet_x86.

    A savoir également que j'ai déployé le projet sur plusieurs ordinateurs et que l'erreur apparait sur certains mais pas sur d'autres... Si je supprime l'appelle (en modifiant mon projet) à IBM.Data.DB2.dll, tout se passe bien.

    Est-ce que la solution serait de tester chaque dll que j'ai généré en espérant que l'une des 3 fonctionne ? Cela risque d'être long !
    Si vous avez d'autres solutions ?

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    c'est l'exe qu'il faut compiler en x86, ou alors trouver une dll x64
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 16
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    c'est l'exe qu'il faut compiler en x86, ou alors trouver une dll x64
    Euh... quel exe ?

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    ah d'accord ^^

    en fait tu as fais une dll pour un exe qui n'est pas le tiens
    et donc cet exe serait en anycpu, il te faut trouver une dll db2 x64 pour les pcs avec un OS x64 (ou alors utiliser autre chose que db2)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 16
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    ah d'accord ^^

    en fait tu as fais une dll pour un exe qui n'est pas le tiens
    et donc cet exe serait en anycpu, il te faut trouver une dll db2 x64 pour les pcs avec un OS x64 (ou alors utiliser autre chose que db2)
    Non non j'ai tout fais tout seul comme un grand
    C'est juste que je fais une "Class Libraby" et non pas un "Windows Form Application". Donc en fait lorsque je compile (Build \ Build Solution) j'ai bien modifié à chaque fois dans les propriété du projet (Onglet Compile \ Advance Compile Options... \ Target CPU) le fait de compiler en AnyCPU \ x86 \ x64.

    Le problème, ce que je n'ai pas le choix pour DB2.
    Comment savoir si la dll pour DB2 est pour un x64, x86 ou AnyCPU ?

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    une dll ne s'exécute pas, seuls les exes s'exécutent
    donc il y a bien un exe qui s'exécute dans l'histoire et si toi tu as fais une dll alors ce n'est pas ton exe qui affiche le badimageformatexception
    ce type d'erreur c'est comme dit précédemment un exe x64 qui charge une dll x86 ou l'inverse
    et c'est l'exe qui choisit si le programme sera en x86 ou en x64 les dll ne prennent pas la décision
    il y a un mode de compilation AnyCpu (par défaut) qui fait que ca sera automatiquement l'un ou l'autre selon l'OS

    donc si tu as cette erreur à cause de la dll db2 c'est que la dll db2 n'est pas dans le format attendu par l'exe, et ta dll n'y est pour rien
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Intégrer une dll dans un projet VB.NET
    Par Nijin dans le forum Accès aux données
    Réponses: 2
    Dernier message: 19/04/2014, 02h33
  2. [Débutant] Appel d'une dll native dans un projet VB.Net
    Par 3aychoucha dans le forum VB.NET
    Réponses: 0
    Dernier message: 25/04/2012, 15h24
  3. Utiliser la dll fmod dans un projet vb.net
    Par MCJC-IMB dans le forum VB.NET
    Réponses: 13
    Dernier message: 03/08/2010, 17h23
  4. insérer une dll dans un projet
    Par Biosox dans le forum MFC
    Réponses: 3
    Dernier message: 24/01/2006, 10h41
  5. Erreur compilation DLL dans Eelphi 6
    Par jakouz dans le forum Langage
    Réponses: 2
    Dernier message: 25/05/2005, 16h38

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