Bonjour à tous,
Pb assez spécifique d'où l'intitulé qui fait 20bornes
Je développe un projet Windows Form en c++ managé qui nécessite l'utilisation d'une dll native.
Celle-çi contient une méthode du type :
Voici l'interface de mon objet managé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void addCallback(void* object, void (*returnValueCallback)(void*, int));
et l'implémentation :
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 #pragma once #include "cli_ptr.h" using namespace System; using namespace System::Windows::Forms; public ref class MonObjet { public: MonObjet(String^ name, String^ ip, int port); ~MonObjet(); String^ m_name; String^ m_ip; int m_port; };
Pour convertir mon O.M. en void* (qui sera en fait le premier arg du callback appelé par ma dll) et vice-versa j'utilise la merveilleuse classe "cli_ptr" que j'ai trouvé sur le blog de Paslatek http://www.paslatek.net/shared_ptr-o...090909-23.aspx
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
26
27
28
29
30
31
32
33
34
35
36
37 #include "stdafx.h" #include "MonObjet.h" void callback_portMonObjetValueChanged(void* baton, int port); MonObjet::MonObjet(String^ name, String^ ip, int port) { m_name = name; m_ip = ip; m_port = port; shared_ptr<cli_ptr<MonObjet>> ptr = cli_ptr<MonObjet>::Create(this); void* objetVoid = ptr->GetNative(); maDll->addCallback(objetVoid , &callback_portMonObjetValueChanged); } MonObjet::~MonObjet() { } /////////////////////////////////////////////////////////// //Callbacks /////////////////////////////////////////////////////////// void callback_portMonObjetValueChanged(void* objet, int port) { // get the managed object shared_ptr<cli_ptr<MonObjet>> ptr2 = cli_ptr<MonObjet>::Create(objet); MonObjet^ monObjet= ptr2->GetManaged<MonObjet>(); // update the MonObjet port attribute monObjet->m_port = port; }
Mon pb : impossible de récup la bonne instance de MonObjet dans le callback
Je récupère bien un Objet du type MonObjet mais impossible d'accéder à ses membres, monObjet est nullptr !
Je précise que la classe "cli_ptr" fonctionne si je l'utilise simplement, sans passer par la dll native.
Ce que je veux faire est il possible ?
Si oui j'ai du faire une bourde qlq part...
Qlq'un a-t-il une idée svp ?
Partager