Probl�me appel dll c++ en c++/cli
Bonjour,
contexte :
j'ai compil� une dll c++ (utilisant les dll OpenCV). dans cette dll je compile 3 classes.
j'ai ensuite cr�er une classe c++/cli pour wrapper cette dll C++ (et ensuite l'utiliser dans une appli C#)
j'ai cr�er un projet de test en c++/cli pour tester l'importation de la dll c++ et ma classe .
lors des tests, lorsque je sors de ma dll c++ les objets internes a mes classes sont nettoy�s.
je suis bien rouill� en c++ et d�butant en c++/cli, j'ai du rater quelque chose d'essentielle, pourriez-vous m'aider svp?
une des classe c++
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
#define DllExport __declspec( dllexport )
class DllExport RAD_Model{
private:
Mat Model_descriptors;
vector<KeyPoint> Model_keypoints;
vector<int> Index_Model;
vector<string> SubModel_Name;
GpuMat Model_descriptors_GPU;
GpuMat Model_keypoints_GPU;
int NbModels;
int Complet;
public :
RAD_Model::RAD_Model(const char* path_Model, int Mode, bool GPU);
RAD_Model::RAD_Model();
RAD_Model::RAD_Model(RAD_Model const & toCopy);
}; |
la classe wrapper c++/cli
Code:
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 26 27 28 29 30 31
|
public ref class BWorker
{
private:
WorkerBunny* Worker;
RAD_Params* Params;
RAD_Model* Model;
public:
BWorker(System::String ^Path_Model)
{
string stdPath_Model = conversion::convertStringToStlString(Path_Model);
Model = &RAD_Model(stdPath_Model.c_str(), 0, true);
/* le code s'execute normalement, les variable interne sont alloué et le code semble aller au bou (affectation de la variable Complet a 1).
cependant, lorsque je debug en pas a pas je vois qu'en sortant du constructeur je passe par les destrcuteur de tous mes objets interne a ma classe RAD_Model
résumer :
ces variables de ma classe RAD_Model sont nettoyées
Mat Model_descriptors;
vector<KeyPoint> Model_keypoints;
vector<int> Index_Model;
vector<string> SubModel_Name;
GpuMat Model_descriptors_GPU;
GpuMat Model_keypoints_GPU;
celle ci sont bien a la valeur attendu:
int NbModels;
int Complet;
*/
Params = &RAD_Params(true);
}
} |
merci pour votre attention!