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 :

Wrapper "c++" de "c" pour c#


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Par défaut Wrapper "c++" de "c" pour c#
    Bonjour a tous,...

    Voici la situation,...

    j'ai un fichier .h que j'aimerais utiliser dans une projet c#

    pour ce faire il faut passer par un Wrapper de ce fichier .h en c++ sous forme de .dll intégrable par la suite dans le projet c#

    le fichier source lightstone.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIGHTSTONE_DECLSPEC lightstone* lightstone_create();
    dans un projet c++ CLR bibliotheque de class

    LightStoneA.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // LightStoneA.h
     
    #include "lightstone/lightstone.h"
    #pragma once
     
     
    	public ref class LightStoneWrapper
    	{
    		public:
     
    			lightstone* lightstone_createW();
            }
    le fichier LightStoneA.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "LightStoneA.h"
     
    lightstone* LightStoneWrapper::lightstone_createW()
    {
    	return lightstone_create();
    }

    j'obtiens 3 erreurs;...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	1	error LNK2028: jeton non rÚsolu (0A00004F) "extern "C" struct lightstone * __cdecl lightstone_create(void)" (?lightstone_create@@$$J0YAPAUlightstone@@XZ) rÚfÚrencÚ dans la fonction "public: struct lightstone * __clrcall LightStoneWrapper::lightstone_createW(void)" (?lightstone_createW@LightStoneWrapper@@$$FQ$AAMPAUlightstone@@XZ)	visual studio 2013\Projects\LightStoneA\LightStoneA\LightStoneA.obj	LightStoneA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	2	error LNK2019: symbole externe non rÚsolu "extern "C" struct lightstone * __cdecl lightstone_create(void)" (?lightstone_create@@$$J0YAPAUlightstone@@XZ) rÚfÚrencÚ dans la fonction "public: struct lightstone * __clrcall LightStoneWrapper::lightstone_createW(void)" (?lightstone_createW@LightStoneWrapper@@$$FQ$AAMPAUlightstone@@XZ)	visual studio 2013\Projects\LightStoneA\LightStoneA\LightStoneA.obj	LightStoneA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	3	error LNK1120: 2 externes non rÚsolus	c:\users\alamata\documents\visual studio 2013\Projects\LightStoneA\Debug\LightStoneA.dll	LightStoneA
    ...

    une âme charitable pour éclairer ma lanterne ,...

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    une âme charitable pour éclairer ma lanterne ,... .
    Heu, désolé, mais là, c'est plus toi à nous fournir un peu de pétrole pour nos lanternes.

    Vu la tronche du biniou, je suis à peu près sûr que ce n'est pas du header-only comme bibliothèque.

    Je suppute même, comme qui dirait, une dll dans le noir.

    Il faut utiliser le .lib lors de l'édition de lien de votre code C++/CLI.

  3. #3
    Membre actif
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Par défaut
    Bonjour à Vous,...

    vous supputer tres bien,...

    voici un peu d'essence,...

    https://github.com/openyou/liblightstone

    ""
    liblightstone comes in two flavors: Win32 and libusb-1.0. The Win32 version uses direct Win32 DDK calls to access the windows HID system, and reads raw reports from there

    ""

    comment puis je utiliser cette library dans un projet c#

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu ne l'utilises pas directement dans ton projet C#, tu la lies normalement à ton projet C++/CLI.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre actif
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Par défaut
    ...Super ,... merci a vous deux,...

    j'avais omis de reférencer la .lib

    merci de votre patience,...

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Au passage, ceci s'annonce déjà mal pour un wrapper C++/CLI:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public ref class LightStoneWrapper
    	{
    		public:
     
    			lightstone* lightstone_createW();
            }
    Tu n'es pas censé avoir de fonction publique retournant un pointeur nu vers l'objet de la bibliothèque sous-jacente. En fait, tous les types de la bibliothèque sous-jacente sont à considérés comme privés, et le code C# ne doit voir que des wrappers dessus (pour les types référence) ou des structures de données converties lors des appels (pour les types valeur).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

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