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++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    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 éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    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
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    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
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    ...Super ,... merci a vous deux,...

    j'avais omis de reférencer la .lib

    merci de votre patience,...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    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.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Resalut,...


    Citation Envoyé par Médinoc Voir le message
    Au passage, ceci s'annonce déjà mal pour un wrapper C++/CLI:

    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).
    vous êtes quand même des super crack,...

    j'allais justement revenir vers vous avec une erreur en c#

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'LightStoneWrapper.LightStoneW.lightstone_createW()' est inaccessible en raison de son niveau de protection
    problème que tu viens d'aborder a l’instant même ,...

    au cas ou,...

    pourrais je lors de la suite de mes tentative d'utilisation de cette librairie en c#
    venir centraliser mes questions dans ce post,...

    merci a vous pour vote patience,..

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Bonjour,...

    C'est dans le flou total que je m'adresse à vous,...

    en effet, après moult essais infructueux, dont notamment des "error C2371: 'lightstone'*: redéfinition*; types de base différents",...

    je n'y arrive toujours pas,...après plusieurs heures d'essais et de recherches

    j'aurais vraiment encore besoin de vous pour m'aiguiller dans la constitution de ce wrapper,...

    comment puis je rendre visible,...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    LIGHTSTONE_DECLSPEC lightstone* lightstone_create()
    {
    	lightstone* s = (lightstone*)malloc(sizeof(lightstone));
    	s->_is_open = 0;
    	s->_is_inited = 0;
    	return s;   
    }
    merci de votre patience

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Rendre visible pour qui? Pour la DLL C++/CLI (bon) ou pour le programme C# (mauvais)?

    Dans le premier cas, ce qui est important n'est pas le code que tu montres: C'est la définition du type lightstone (ou plutôt les définitions, car apparemment il y en a plusieurs, c'est justement le problème) qui est important.
    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.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Rendre visible pour qui? Pour la DLL C++/CLI (bon) ou pour le programme C# (mauvais)?
    rendre visible pour la dll ,...

    Citation Envoyé par Médinoc Voir le message
    Dans le premier cas, ce qui est important n'est pas le code que tu montres: C'est la définition du type lightstone (ou plutôt les définitions, car apparemment il y en a plusieurs, c'est justement le problème) qui est important.
    dans ce contexte,...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    typedef struct {
    	/// Windows device handle
    	HANDLE* _dev;
    	/// 0 if device is closed, > 0 otherwise
    	int _is_open;
    	/// 0 if device is initialized, > 0 otherwise
    	int _is_inited;
    } lightstone;
    ...est ce que cela peut aider,...

    désole pour mon manque de compétences dans le domaine,...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je pense avoir reproduit l'erreur et trouvé la solution: Les fonctions de la bibliothèque ne sont probablement pas déclarées extern "C".
    Dans le projet C++/CLI, essaie d'entourer ainsi le #include:
    Code C++/CLI : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    extern "C" {
    #include "Lightstone.h"
    }
    Dans mon code d'essai, ça a résolu le problème.
    Fichiers attachés Fichiers attachés
    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.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Bonjour,..

    Je tiens tout d'abords à le dire bien haut et bien fort

    MERCI

    MERCI à vous
    pour
    votre tolérance
    votre patience
    votre persévérance
    votre compréhension,....

    ..sans oublier.... votre sens de la communauté...

    ...ainsi que de
    votre gentillesse,...

    ...je suis desolé pour cette effusion

    mais dans le cas qui nous occupe ici

    c'est ce que j'ai ressenti et vecu,...

    grace a vous,...


    Cependant je me permet d'abuser,...


    avec


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     LightstoneWrapper::LightstoneWrapper()
    {
    	pNativeObj = lightstone_create();
    }
    et en c#

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LightstoneWrapper obj = new LightstoneWrapper();
    comment ""atteindre"" , ""récuperer"" le resultat de lightstone_create(); le pNativeObj

    je suis navré de demander encore des explications,...
    mais je ne comprend pas,... et je n'aime pas ca,...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le code C# n'est pas censé y avoir directement accès, c'est pour ça que c'est un wrapper.
    La classe C++/CLI LightstoneWrapper doit exposer des wrappers pour toutes les fonctions de la bibliothèque qui utilisent l'objet lightstone.

    Par exemple, pour LIGHTSTONE_DECLSPEC int lightstone_get_count(lightstone* s) et LIGHTSTONE_DECLSPEC int lightstone_open(lightstone* s, unsigned int device_index)
    Code C++/CLI : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Dans le .h, dans la classe LightstoneWrapper
    public:
    	property int Count { int get(); } /*Il faudra vérifier, je ne suis plus 100% sûr de la syntaxe pour les propriétés*/
    	int Open(unsigned int device_index);
    Code C++/CLI : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //Dans le .cpp, à côté des autres implémentations
    int LightstoneWrapper::Count::get()
    {
    	return lightstone_get_count(pNativeObj);
    }
     
    int LightstoneWrapper::Open(unsigned int device_index)
    {
    	return lightstone_open(pNativeObj, device_index);
    }
    Note: Ma version de Open() est une implémentation "naïve", où l'on retourne directmeent le code d'erreur.
    Une implémentation plus élaborée retournerait void et lancerait une exception personnalisée (genre gcnew LigthstoneException) avec le code d'erreur quand celui-ci est différent de zéro.
    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.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    Bonjour,...

    Citation Envoyé par Médinoc Voir le message
    Le code C# n'est pas censé y avoir directement accès, c'est pour ça que c'est un wrapper.
    La classe C++/CLI LightstoneWrapper doit exposer des wrappers pour toutes les fonctions de la bibliothèque qui utilisent l'objet lightstone.
    ok, je pense avoir compris le principe,... il est temps,... ...

    cependant,...

    avec le dernier code fourni qui m'est encore une fois très précieux,...

    j'obtiens des erreurs , qui je crois sont liées à ""pNativeObj""

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error	1	error LNK2001: unresolved external symbol "extern "C" int __cdecl lightstone_get_count(struct lightstone *)" (?lightstone_get_count@@$$J0YAHPAUlightstone@@@Z)	CppCliWrapper.obj	CppCliWrapper
    Error	2	error LNK2001: unresolved external symbol "extern "C" int __cdecl lightstone_open(struct lightstone *,unsigned int)" (?lightstone_open@@$$J0YAHPAUlightstone@@I@Z)	CppCliWrapper.obj	CppCliWrapper
    et une nouvelle fois je ne sait comment les résoudre,...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben elles sont censées être au même endroit que lightstone_create() et compagnie, c'est en recherchant "lightstone_create" je les ai trouvées...
    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.

  16. #16
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    ...

    c'est vraiment ardu,...

    .....

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Hé bien elles sont toutes déclarées dans le même header et le résultat semble tenir dans la même lib, donc si lightstone_create() et lightstone_delete() marchent il n'y a pas de raison pour que lightstone_get_count() et lightstone_open() ne marche pas...

    PS: Penser aussi à faire la même chose pour les autres fonctions: lightstone_close(), lightstone_get_info(), lightstone_valid() (property)...
    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.

  18. #18
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    ...

    j'ai par exemple

    le .h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	       property int Count{ int get();	}
    		int Open(unsigned int device_index);
    		int Close();
    		int Valid();
    		int Read(unsigned char *report);



    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
     
    int LightstoneWrapper::Count::get()
    {
    	return lightstone_get_count(pNativeObj);
    }
     
     
    int LightstoneWrapper::Open(unsigned int device_index)
    {
    	 return lightstone_open(pNativeObj, device_index);
    }
     
    int LightstoneWrapper::Close()
    {
    	 return lightstone_close(pNativeObj);
    }
    int LightstoneWrapper::Valid()
    {
    	 return lightstone_valid(pNativeObj);
    }
     
    int LightstoneWrapper::Read(unsigned char *report)
    {
    return lightstone_read(pNativeObj,report);
    }

    m'apporte egalement des erreurs....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Error	1	error LNK2001: unresolved external symbol "extern "C" int __cdecl lightstone_get_count(struct lightstone *)" (?lightstone_get_count@@$$J0YAHPAUlightstone@@@Z)	CppCliWrapper.obj	CppCliWrapper
    Error	2	error LNK2001: unresolved external symbol "extern "C" int __cdecl lightstone_open(struct lightstone *,unsigned int)" (?lightstone_open@@$$J0YAHPAUlightstone@@I@Z)	CppCliWrapper.obj	CppCliWrapper
    Error	3	error LNK2001: unresolved external symbol "extern "C" int __cdecl lightstone_close(struct lightstone *)" (?lightstone_close@@$$J0YAHPAUlightstone@@@Z)	CppCliWrapper.obj	CppCliWrapper
    Error	4	error LNK2001: unresolved external symbol "extern "C" int __cdecl lightstone_valid(struct lightstone *)" (?lightstone_valid@@$$J0YAHPAUlightstone@@@Z)	CppCliWrapper.obj	CppCliWrapper
    Error	5	error LNK2001: unresolved external symbol "extern "C" int __cdecl lightstone_read(struct lightstone *,unsigned char *)" (?lightstone_read@@$$J0YAHPAUlightstone@@PAE@Z)	CppCliWrapper.obj	CppCliWrapper

    je n'y arrive pas encore pour ,...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lightstone_info lightstone_get_info(lightstone* dev);

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne comprends pas. Comment as-tu fait pour que lightstone_create() et lightstone_delete() marchent? Fais simplement la même chose!
    L'inclusion du header est toujours dans le bloc extern "C", non?
    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.

  20. #20
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 39
    Points : 28
    Points
    28
    Par défaut
    ...je ne comprend pas non plus,... bien évidement,...

    ...

    encore merci,...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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