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

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    mai 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2015
    Messages : 52
    Points : 47
    Points
    47

    Par défaut Wrapper - Utiliser une dll C++/CLI avec toutes ses dépendances

    Bonjour,

    Je demande votre aide car je souhaite réutiliser des fonctions d'un projet C++ dans mon projet C#. Pour ce faire, j'ai créé un projet C++/CLI pour wrapper les fonctions C++ dans mon projet C# (C++/CLI est compatible aussi bien C# que C++). Pour ce faire, dans un premier temps j'ai créé des fonctions très simple dans mon projet C++/CLI (sans faire appel à des fonctions c++). J'ai ajouté la DLL C++/CLI dans mes références de mon projet C#.
    Dans mon code C#, je fais appel aux fonctions de ma DLL C++/CLI. Mon projet C# me propose bien les fonctions de ma DLL C++/CLI. En compilant mon projet C# pas à pas, je vois bien que mon code passe par mes fonctions C++/CLI. Jusqu'ici tout va bien.

    Maintenant en compliquant les choses, dans mon projet C++/CLI je souhaite faire appel aux fonctions C++. Pour cela ,j'ai fait appel à un fichier header.h en faisant #include "C:\...\header.h" dans mon C++/CLI. Je recompile mon projet C++/CLI. (Mon projet C# est déjà relié à mon projet C++/CLI par la DLL référencé). Je retourne dans mon projet C# et je recompile pas à pas et là j'ai une erreur :

    "An unhandled exception of type 'System.IO.FileNotFoundException' occurred in myProject.exe
    Additional information: Could not load file or assembly 'Wrapper.dll' or one of its dependencies. Le module spécifié est introuvable."

    Le problème je pense c'est que en faisant mon #include "C:\...\header.h", ce fichier header.h lui même dépend de plein d'autres fichiers. J'ai donc alors un problème de linkage/configuration mais je ne sais absolument pas comment résoudre. Du côté C# ? côté C++/CLI? Comment faire? Quoi faire?

    Merci pour votre aide svp.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    4 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2005
    Messages : 4 722
    Points : 11 124
    Points
    11 124

    Par défaut

    Pour quelqu'un qui connait le C++, votre discours et vos tentatives d'explications ne sont pas cohérents.

    Pour cela ,j'ai fait appel à un fichier header.h en faisant #include "C:\...\header.h" dans mon C++/CLI. Je recompile mon projet C++/CLI.
    Inclure un .h n'a jamais inclus du code.
    Ces fonctions C++, elles sont censées être accessibles au code C++/CLI comment ?
    1- copier/coller du code source, .cpp compris ?
    2- c'est que des fonctions template ou inline donc en n'incluant que des .h ?
    3- c'est packager dans une lib statiques ?
    4- c'est packager dans une lib dynamique + Dll ?
    5- Autrement ?

    Si c'est 1, pourquoi ne pas mentionner la récupération des .cpp ?
    Si c'est 2, Ok.
    Si c'est 3 ou 4, il doit avoir un "#pragma comment (lib,...) qui se balade dans le .h pour faire le pont. Et c'est pas un détail.

    L'une des innerExceptions imbriquées doit indiquer quel fichier est manquant.

    Mais, au vu que vous êtes complètement paumé avec des "explications" complètement capilo-tractées, on va commencer par la base :
    Qu'est-ce qui vous fait croire que "S2JLib.exe", s'exécutant dans un working directory que vous ne précisez pas, avec un utilisateur que vous ne précisez pas, à la moindre chance de récupérer dans sa liste des répertoire de recherche de dll ou d'assemblies un répertoire contenant cette Dll, avec un bon numéro de version ?

    Des outils comme process explorer permettent de voir ces chemins de recherches.
    Des outils comme depandancy walker permettent de voir le graphe des dépendances statiques entre Dll.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/05/2010, 13h00
  2. Utilisation une Dll en c avec delphi
    Par yann87 dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 22/12/2008, 16h14
  3. Utiliser une DLL en Delphi avec Visual Basic
    Par jix69 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 25/11/2008, 02h32
  4. Utiliser une DLL Delphi avec C#
    Par h8ciz dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/09/2007, 16h46
  5. Réponses: 8
    Dernier message: 01/06/2007, 00h13

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