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

C# Discussion :

[C#/VS2003] Comment valider une dll non managée ?


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Points : 32
    Points
    32
    Par défaut [C#/VS2003] Comment valider une dll non managée ?
    Bonjour,

    Je dois utiliser une dll dans un projet c# mais le problème est que j'ai un message d'erreur lors de la déclaration de la référence dll dans le projet.
    L'erreur est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    il ne s'agit pas d'un assembly valide ou d'un composant com
    Auriez vous une idées ?

    Cordialement,

    @+ xarius

  2. #2
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    oui ta dll n'est pas une dll managée, ce n'est pas un assembly .NET.
    Tu dois passer par les P/Invoke pour utiliser cette dll.
    http://morpheus.developpez.com/dlldotnet/

    @+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Points : 32
    Points
    32
    Par défaut
    Je l'utilise déja :

    Ex de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    using System;
    using System.Runtime.InteropServices;
     
     
     
    /**
     * Classe de test en C# 
     * 
     *
    **/ 
    namespace monappli_ng
    {	
     
    	public class AppelDll
    	{
    		[ DllImport("ma.dll") ]
    		public static extern void setTrace (int traceLevel);
     
    	}
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    using System;
    using monappli_ng;
     
     
    namespace TestConsole
    {
    	/// <summary>
    	/// Description résumée de Class1.
    	/// </summary>
    	class Test
    	{
    		/// <summary>
    		/// Point d'entrée principal de l'application.
    		/// </summary>
    		[STAThread]
    		static void Main(string[] args) 
    		{
    			AppelDll.setTrace(0);
    			System.Console.WriteLine("Test OK");
    			System.Console.ReadLine();
    		}
     
    	}
    }
    La dll est à la racine des sources.

    Si ça peut vous aider ?

    Cordialement,

    @+ xarius

  4. #4
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    ca devrait fonctionne apparement.
    Est ce que la dll est aussi dans le meme repertoire que ton executable ?
    sinon c'est quoi les erreurs que tu as ?

    @+

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Points : 32
    Points
    32
    Par défaut
    l'erreur est :

    Une exception non gérée du type 'System.EntryPointNotFoundException' s'est produite dans TestConsole.exe

    Informations supplémentaires*: Impossible de trouver le point d'entrée setTrace dans la DLL ma.dll.


    Et la dll est bien dans le même répertoire que l'exe.

    xarius

  6. #6
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    tu as regarder le tuto : http://morpheus.developpez.com/dlldotnet/
    parfois il faut specifier un point d'entré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [ DllImport("user32.dll", EntryPoint="FlashWindow") ]
    PS : dans ton cas c'est pas FlashWindow, tu t'en doutais...

    @+

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Points : 32
    Points
    32
    Par défaut
    pas de changement non plus, on dirait qu'il ne trouve pas la dll ?


    xarius

  8. #8
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    Citation Envoyé par xarius
    pas de changement non plus, on dirait qu'il ne trouve pas la dll ?
    xarius
    je pense qu'il trouve la dll sinon tu aurais une autre erreur.
    FileNotFound ou MethodNotFound ou un truc comme ca.
    Tu es sur des methodes dans ta dll ?
    Apres je sais pas trop comment te depanner

    @+

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Points : 32
    Points
    32
    Par défaut
    Je vais décompiller ma dll pour voir, car en fait se n'est pas moi qu'il l'ai écrit.

    Merci pour ton aide.

    @+ xarius

  10. #10
    Membre expérimenté
    Avatar de freddyboy
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2003
    Messages
    810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2003
    Messages : 810
    Points : 1 696
    Points
    1 696
    Par défaut
    Citation Envoyé par xarius
    Je vais décompiller ma dll pour voir, car en fait se n'est pas moi qu'il l'ai écrit.

    Merci pour ton aide.

    @+ xarius
    si tu veux voir les methodes qui sont dedans tu fais :
    - lancer le prompt visual studio 2003 (Program -> VS -> Outils -> Prompt)
    - tu lance la commande suivante : dumpbin.exe /EXPORTS C:\tadll.dll

    J'ai ecrit un petit soft graphique pour dumpbin le week end dernier mais il n'est pas encore dispo sur mon site. Désolé il te reste la ligne de commande.

    @+

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Si j'ai bien compris, la dll non managée en question est incluse dans le projet.
    Si c'est le cas, il faut la retirer du projet.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 38
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    je ne peux pas la retirer du projet (reference) via visual studio car à l'inclusion de celle ci j'ai le message d'erreur suivant :

    il ne s'agit pas d'un assembly valide ou d'un composant com

    Sinon j'ai listé les fonctions de ma dll, et celle que j'appelle existe bien.

    @+ xarius

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Il faut vérifier si la fonction est bien exportée par cette DLL et sous quel nom.
    Pour ça www.dependencyWalker.com

    Si non vérifier la déclaration de la fonction dans cette dll.
    Exemple en C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern "C" __declspec(dllexport) void  __stdcall FonctionExportee(void);

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/01/2008, 16h39
  2. appeler du .NET depuis une dll non managé
    Par sebs_78 dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 05/12/2007, 09h36
  3. Réponses: 12
    Dernier message: 23/05/2007, 21h40
  4. Réponses: 3
    Dernier message: 19/02/2007, 15h07
  5. Dll managé utilise une dll non managé
    Par DAMVAL dans le forum C++/CLI
    Réponses: 3
    Dernier message: 28/11/2006, 10h36

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