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 :

Conserver une référence d'une dll c++ native jusqu'à couche C#


Sujet :

C++/CLI

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Points : 23
    Points
    23
    Par défaut Conserver une référence d'une dll c++ native jusqu'à couche C#
    Bonjour à tous,
    Je vais essayer d'être le plus clair possible.
    J'ai écris une DLL native qui contient 1 méthode effectuant tout un tas de calcul. jusque la tout va bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double SpectralPropertySoil(double slope, double snow,double snowage, double IN_thetas, double thetassat, double &OUT_reflvs, double &OUT_reflns,double ksnow, double reflvsground, double reflvssnowfresh, double reflvssnowold,double reflnsdry, double reflnsmoist, double reflnssnowfresh, double reflnssnowold) { some calculations...}
    Notez les 2 références que je souhaite récupérer en C# !
    J'ai donc rajouté un projet C++/CLI dans lequel je référence cette DLL native et je "wrapp" cette fonction dans une public ref class comme ceci :
    Le fichier.h:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double SpectralPropertySoilWrapped( double slope, double snow,double snowage, double IN_thetas, double thetassat, double %OUT_reflvs, double %OUT_reflns,double ksnow, double reflvsground, double reflvssnowfresh, double reflvssnowold,double reflnsdry, double reflnsmoist, double reflnssnowfresh, double reflnssnowold);
    Le fichier.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    double CompleteWrapper::SpectralPropertySoilWrapped( double slope, double snow,
    double snowage, double IN_thetas, double thetassat, double %OUT_reflvs, double %OUT_reflns,
    double ksnow, double reflvsground, double reflvssnowfresh, double reflvssnowold,
    double reflnsdry, double reflnsmoist, double reflnssnowfresh, double reflnssnowold)
    {	return PasimWrapper::SpectralPropertySoil(slope,  snow, snowage, IN_thetas, thetassat, OUT_reflvs,OUT_reflns, ksnow, reflvsground, reflvssnowfresh, reflvssnowold, reflnsdry, reflnsmoist, reflnssnowfresh, reflnssnowold);
    A ce niveau j'ai une erreur qui me dit : the % operator can be used only on an object with a managed class type.

    et enfin mon projet C# qui utilise cette DLL. Le tout fonctionne à peu près bien car je n'arrive pas à récupérer les 2 valeurs référencées en natif (&). J'ai essayé des choses avec des pointeurs, des tracking reference, etc...mais je crois que j'ai besoin d'un oeil extérieur maintenant. Les valeurs sont conservées jusqu'à la couche C++/CLI et au moment ou le programme retourne dans le C# les références sont perdues.
    Auriez vous une piste ? une indication ? ou peut être je fais mal les choses avec mon code ?
    Dites moi car la je dois dire que je suis à cours d'idées.
    Merci !
    @pluche

  2. #2
    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 518
    Points
    41 518
    Par défaut
    J'ai bien peur que tu aies besoin de faire un wrapper légèrement plus élaboré, qui travaille sur des copies des variables, plutôt que les variables elles-mêmes:
    Code C++/CLI : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    double CompleteWrapper::SpectralPropertySoilWrapped( double slope, double snow,
    	double snowage, double IN_thetas, double thetassat, double %OUT_reflvs, double %OUT_reflns,
    	double ksnow, double reflvsground, double reflvssnowfresh, double reflvssnowold,
    	double reflnsdry, double reflnsmoist, double reflnssnowfresh, double reflnssnowold)
    {
    	double copy_reflvs = OUT_reflvs;
    	double copy_reflns = OUT_reflns;
    	double ret = PasimWrapper::SpectralPropertySoil(slope, snow, snowage, IN_thetas, thetassat, copy_reflvs, copy_reflns, ksnow, reflvsground, reflvssnowfresh, reflvssnowold, reflnsdry, reflnsmoist, reflnssnowfresh, reflnssnowold);
    	OUT_reflvs = copy_reflvs;
    	OUT_reflns = copy_reflns;
    	return ret;
    }
    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.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    J'ai bien peur que tu aies besoin de faire un wrapper légèrement plus élaboré, qui travaille sur des copies des variables, plutôt que les variables elles-mêmes:
    Code C++/CLI : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    double CompleteWrapper::SpectralPropertySoilWrapped( double slope, double snow,
    	double snowage, double IN_thetas, double thetassat, double %OUT_reflvs, double %OUT_reflns,
    	double ksnow, double reflvsground, double reflvssnowfresh, double reflvssnowold,
    	double reflnsdry, double reflnsmoist, double reflnssnowfresh, double reflnssnowold)
    {
    	double copy_reflvs = OUT_reflvs;
    	double copy_reflns = OUT_reflns;
    	double ret = PasimWrapper::SpectralPropertySoil(slope, snow, snowage, IN_thetas, thetassat, copy_reflvs, copy_reflns, ksnow, reflvsground, reflvssnowfresh, reflvssnowold, reflnsdry, reflnsmoist, reflnssnowfresh, reflnssnowold);
    	OUT_reflvs = copy_reflvs;
    	OUT_reflns = copy_reflns;
    	return ret;
    }
    Bon ben quoi dire de plus si ce n'est un grand merci !
    Un œil extérieur est toujours le bienvenu.

    nono

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    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 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Remarques à 2 balles :
    - des références dans une signature -> Une API C++ et plus C -> Une API toute pourrie qui ne supportera qu'un type de compilateur.
    - Vous avez beaucoup de paramètres, pourquoi ne pas les regroupés dans des structures (en C cf. ma 1ère remarque à 2 balles).

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

Discussions similaires

  1. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Garder une référence vers une variable d'une autre classe
    Par choupeo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/12/2007, 18h30
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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