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