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#] utilisation d'une DLL de fonctions C


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut [C#] utilisation d'une DLL de fonctions C
    Bonjour à tous, je cherche à faire un programme en C# qui communique une carte K8055 (carte USB avec entrées/sorties analogiques/numériques)
    Une DLL est fournie par le constructeur et je souhaite l'utiliser dans mon projet (VS 2005 ou 2008)

    Je met ma DLL en référence du projet et je définis la classe suivante pour accéder aux fonctions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public sealed class api // DLL Wrapper
    {
        #region API Declares
        [DllImport("k8055d.dll")]
        public static extern int OpenDevice(int devNumber);
        [DllImport("k8055d.dll")]
        public static extern void CloseDevice();
        ...
        #endregion
    }
    et lors de la compilation j'ai ces 3 erreurs :

    Error 1 The "ResolveManifestFiles" task failed unexpectedly.
    System.ArgumentException: Illegal characters in path.
    at System.Security.Permissions.FileIOPermission.HasIllegalCharacters(String[] str)
    at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)
    at System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String[] pathList, Boolean checkForDuplicates, Boolean needFullPath)
    at System.IO.Path.GetFullPath(String path)
    at Microsoft.Build.Tasks.Deployment.ManifestUtilities.Util.RemoveDuplicateItems(ITaskItem[] items)
    at Microsoft.Build.Tasks.Deployment.ManifestUtilities.Util.SortItems(ITaskItem[] items)
    at Microsoft.Build.Tasks.ResolveManifestFiles.set_NativeAssemblies(ITaskItem[] value) K8055Test
    Error 2 The "NativeAssemblies=@(NativeReferenceFile);@(_DeploymentNativePrerequisite)" parameter for the "ResolveManifestFiles" task is invalid. K8055Test
    Error 3 The "ResolveManifestFiles" task could not be initialized with its input parameters. K8055Test
    Il met qu'il y a un problème dans le chemin d'accès à la DLL alors que celle ci est dans C:\DLL\V3\k8055d.dll


    Je ne vois pas pourquoi ça ne marche pas
    J'espère que vous pourrez m'aider

    Merci d'avance

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est bizarre ton truc, parce que normalement le compilateur ne vérifie pas la DLL indiquée dans DLLImport...

    Par contre, si c'est une DLL native, tu n'as pas besoin de la mettre en référence du projet (d'ailleurs normalement tu peux pas )

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut
    Citation Envoyé par tomlev Voir le message
    C'est bizarre ton truc, parce que normalement le compilateur ne vérifie pas la DLL indiquée dans DLLImport...

    Par contre, si c'est une DLL native, tu n'as pas besoin de la mettre en référence du projet (d'ailleurs normalement tu peux pas )
    oui c'est une DLL native, voyant que le programme plantait dès l'utilisation d'une fonction de la DLL, je l'ai ajouté en référence du projet et c'est là que j'ai eu les 3 erreurs ci dessus.

    Donc quand je n'ai pas la DLL en référence je n'ai aucune erreur à la compilation, mais à l'exécution j'ai une exception :
    BadImageFormatException
    Tentative de chargement d’un programme de format incorrect.
    à K8055Test.Form1.api.SearchDevices()
    du coup je pense qu'il ne trouve pas la DLL mais je vois pas comment arranger ça...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Non, s'il ne trouvait pas la DLL ce serait une autre erreur. Là ça veut dire que la DLL n'a pas le format attendu. Ton programme est en 32 ou 64 bits ? C'est peut-être de là que vient le problème...

    Fais voir la signature C des fonctions natives

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut
    Mon programme est en effet en 64bits (comment le passer en 32?)
    Sinon les signatures C sont dans le PDF disponible ici


    Edit : Problème résolu, merci, c'était bien à cause du 64bits qu'il aimait pas ma DLL. en compilant le programme C# en 32bits ça marche nickel.

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

Discussions similaires

  1. Extraires fonctions utilisées dans une DLL
    Par dkmix dans le forum Débuter
    Réponses: 1
    Dernier message: 23/11/2012, 16h03
  2. Réponses: 6
    Dernier message: 21/06/2005, 21h45
  3. [DLL] Utilisation d'une DLL pour utiliser serveur Firebird
    Par sekiryou dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/08/2004, 14h20
  4. [Info]Utilisation d'une Dll
    Par Assiobal dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 11/06/2004, 21h46
  5. Utilisation d'une dll écrite en delphi 5 dans VB6
    Par Jean-Louis dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 09h19

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