[ Beban @ 17.09.2004. 11:56 ] @
Ovako... 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: Code: #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? |