Passage objet manag� � une callback appel�e par une dll native
Bonjour � tous,
Pb assez sp�cifique d'o� l'intitul� qui fait 20bornes :lol:
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:
1 2
|
void addCallback(void* object, void (*returnValueCallback)(void*, int)); |
Voici l'interface de mon objet manag� :
Code:
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:
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 ?