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++/CLI Discussion :

Link avec lib winCe


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 59
    Par défaut Link avec lib winCe
    Bonjour,

    Je cherche a ajouter une gestion simplifié du wifi sur un appareil WinCe6 a partir d'un programme en c#.
    Le fabricant du lecteur m'a fourni le sdk pour l'accés a la partie wifi (http://www.lairdtech.com/brandworld/...pers%20Kit.pdf)

    La doc est clair, pour du .net il faut un wrapper. Clairement c'est nouveau pour moi.
    J'ai suivi les tutos que j'ai pu trouver et j'en suis la :
    J'ai un projet CLI sur VS2008, j'ai ajouter le .h et le .lib founit et j'ai fait un bout de code basique pour tester :
    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
     
    #pragma once
    #include "sdc_sdk.h"
    using namespace System;
    namespace WrapperSCU {
    	public ref class WrapperSCUClass
    	{
    		public: 			
    			int WRadioDisable()
    			{
    				SDCERR	ret=RadioDisable();
    				if(ret==SDCERR_SUCCESS)
    					return 0;
    				else
    					return -1;
    			}
    	};
    J'obtiens le duo d'erreur : LNK2028 LNK2019 qui me dit que la fonction RadioDisable n'a pu etre linké.

    Aprés recherche il semblerait que ca peut venir de la difference de compilateur C++ entre la lib et mon projet. Dans la doc il parle de Embedded VC++, pas vraiment la techno la plus moderne...
    Je l'ai installé sur un VM ( ca ne s'installe plus sur W8.1) mais eVC ne propose pas de créer de wrapper...

    Je suis a court d'idée, si jamais vous avez une piste je suis preneur.

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 482
    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 482
    Par défaut
    LNK2028 LNK2019 qui me dit que la fonction RadioDisable n'a pu etre linké.
    Vous avez oubliez d'entourer l'include du SDK par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern "C" {#include "sdc_sdk.h"}
    C'est une lib en C et pas en C++, avec cette astuce, le linker peut utiliser cette librairie sdk.lib, qui a des noms de symbole au format C et non C++.

    Embedded VC++
    Ça sent le sapin !!!
    Vérifiez la plateforme cible de votre Dll, elle doit être compatible avec l'OS de l'appareil cible.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 59
    Par défaut
    Je ne l'ai pas précisé mais le .h contient le extern_c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifdef __cplusplus
     extern "C" {
    #endif
    Je pense que ça doit faire pareil.

    La plateforme cible est compatible, c'est la même que pour mon projet c# qui fonctionne sans soucis sur l'appareil (NetCompact 3.5) la cible peut avoir un impact sur le link ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 482
    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 482
    Par défaut
    Je pense que ça doit faire pareil.
    Oui, mais comme je l'avais vu dans la documentation et pas dans votre code, cela m'avait fait tiquer.
    LNK2028
    https://msdn.microsoft.com/en-us/lib...or=-2147217396
    Il faut donc changer les options de compilation, car votre assembly C++/CLI d’interconnexion avec ce SDK ne peut être "/clr:pure".
    https://msdn.microsoft.com/en-us/library/k8d11d4s.aspx

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 59
    Par défaut
    J'ai vérifié je ne suis pas en /clr:pure mais bien en /clr.

    Je ne comprends pas bien l'usage de __declspec(dllexport) j'ai mis __declspec(dllimport) devant ma déclaration sdc_sdk.h mais pas de changement.

    c'est noté de compiler en /LD mais je ne trouve pas cette option, je n'ai que /MT /MTd /MD /MDd. Selon la doc du deuxième lien /MT semblait le plus approprié.

    Si je ne peux pas m'en sortir avec un wrapper, est-ce que faire une dll c++ classique a partir de la lib et l’utiliser avec des import en c# serait une option viable ?

  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
    Euh, il me semblait que seuls /MD et /MDd étaient compatibles avec /clr...

    Personnellement, je conseillerais de commencer par tester si tu arrives à utiliser la lib dans un programme natif, avant d'ajouter les autres facteurs comme le /clr.
    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.

Discussions similaires

  1. Link libpq.lib avec Visual studio 2008 64bit
    Par nice.girl1983 dans le forum Visual C++
    Réponses: 6
    Dernier message: 23/09/2010, 15h34
  2. erreur link avec Builder C++
    Par axxel dans le forum DirectX
    Réponses: 8
    Dernier message: 20/07/2004, 02h58
  3. Problème avec lib SDL
    Par Info-Rital dans le forum Linux
    Réponses: 8
    Dernier message: 02/07/2004, 20h59
  4. Problème de link avec Borland C++ 5.5
    Par gelam dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 24/11/2003, 16h45
  5. pb de link avec direct X 8.1
    Par amaury pouly dans le forum DirectX
    Réponses: 2
    Dernier message: 01/04/2003, 08h04

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