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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
void addCallback(void* object, void (*returnValueCallback)(void*, int));
Voici l'interface de mon objet managé :

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;
 
};
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
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;
}
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

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 ?