none
Dll c++ et programme c# RRS feed

  • Question

  • Bonjour à tous,

    Je suis en train de travailler sur un programme csharp, nommé "prog1", utilisant une dll écrite en c++, nommée "Calibration.dll". J'utilise DllImport de la façon suivante (un exemple de mes quatre fonctions que j'utilise) :

    [DllImport("Calibration.dll")]

    unsafe public static extern int Gips_Init_Calibration(string ini_filename, void* camera_ptr);


    pour créer une classe csharp "calibration.cs" qui permettent de faire le lien entre mes fonctions de la dll "Calibration.dll" et mon programme "prog1". Mais à chaque fois que j'appelle cette fonction (où une autre d'ailleurs), j'ai le droit au message suivant :

    Impossible de charger la DLL 'Calibration.dll': Le module spécifié est introuvable. (Exception de HRESULT : 0x8007007E)

    alors que la dll "Calibration.dll" est dans le même répertoire que le .exe du programme "prog1" (pour tout dire, à chaque génération du programme, la dll est copié avec le .exe).

    Cela va faire trois jours que je cherche une solution, sachant que j'ai déjà eu l'occasion de travailler sur un programme csharp, disons "prog2", utilisant une dll c++, disons "traitement.dll", avec la même méthode, et "prog2" fonctionne correctement...

    Merci d'avance pour votre réveillon, et pour ceux qui lirons ce poste avant le 31/12/14, joyeuses fêtes :)

    Foxaltex
    mercredi 31 décembre 2014 14:52

Toutes les réponses

  • Bonjour,

    Dans le thread Unable to load DLL (Module could not be found HRESULT: 0x8007007E) il y a quelques idées. Vous pouvez aussi essayer Process Monitor pour trouver l'erreur.

    Merci de nous tenir au courant.

    Cordialement,

    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    lundi 5 janvier 2015 15:36
    Modérateur
  • Bonjour, 

    L'emplacement par défaut des librairies est c:\windows\system32 et pas le même répertoire de l'exécutable. Il faut placer la DLL manuellement dans cet répertoire ou à travers les configs de VS ($(OutDir)\$(ProjectName).dll) préciser l'emplacement de la librairie dans la fonction Dllimport.

    Après il faut prévoir la déclaration de l'API dans la DLL et le syntaxe d'appel en C#...   

    samedi 10 janvier 2015 03:29