Radi se o miksovanju managed i unmanaged code-a (C++ je u pitanju).
Znam da u unmanaged klasi mogu da imam managed objekat, ako je njegov tip ne .NET, vecc neka vrsta smart pointer-a generisana sa gcroot template-om. I to funkcionisse, bass kao na naccin opisan u MSDN-u.
Ono ssto mene mucci je sledecce:
imam jednu managed i jednu unmanaged klasu. Potrebno mi je da klase "opametim" tako da vide jedna drugu - znacci svaka od njih da ima pointer na onu drugu.
U obiccnom CPP za takve stvari se koristi forward deklaracija u jednoj od njih. To sam pokussao i ovdje: managed klasa ima pointer na objekat unmanaged klase, a ova druga u heder-u forward deklaraciju managed klase, i pointer na nju.
Npr:
#include"unmanaged.h"
class __gc CManaged
{
CManaged() { m_pUnmanaged = new CManaged(this); }
CUnmanaged* m_pUnmanaged;
}
-----------
UNMANAGED.H:
#include <vcclr.h>
gcroot<class CManaged*>;
class CUnmanaged
{
gcroot<CManaged*>m_pManaged;
}
UNMANAGED.CPP
#include"unmanaged.h"
#include"managed.h"
CUnmanaged::CUnmanaged(gcroot<CManaged*>managed)
{
m_pManaged = managed;
}
Problem nastaje kada pokussam da objekat managed klase prosledim objektu u unmanaged klasi - izgleda da ova ssetnja nije dozvoljena (bez obzira koji tip argumenta navedem u konstruktoru CUnmanaged - bilo gcroot, bilo pointer na managed klasu). Gressku javlja u konstruktoru managed klase, u liniji u kojoj kreiram objekat unmanaged i prosledjujem mu parametar this.
Da li neko zna kako ovo da izvedem?