PDA

Prikaži potpunu verziju : C++ i CComObject


orange47
6.2.2012, 16:39
jel moze neko, molim, da mi objasni sta znace ove linije:


static CComObject<CCategorizedProperty>* m_pCategorized;

CComObject<CCategorizedProperty>* PropertyAdmin::m_pCategorized = NULL;

Belphegor
6.2.2012, 17:19
static CComObject<CCategorizedProperty>* m_pCategorized;
Pokazivac na objekat CComObject klase koja je templejt.
static znaci jedan po klasi i dele ga sve instance te klase (PropertyAdmin), posto vidim da pripada:

PropertyAdmin::m_pCategorized

CComObject<CCategorizedProperty>* PropertyAdmin::m_pCategorized = NULL;// sad ne pokazuje nigde, ali je neophodno izvesti van klase u nekom cpp fajlu
Inicijalizacija tog pokazivaca, prema kodu izgleda da se negde drugde dodeljuje konkretna adresa.

orange47
6.2.2012, 17:29
Hvala..
Trebao bi nekako da promenim klasu i njenu funkciju (CCategorizedProperty) tako da ima parametar.
Sve sam lepo odradio u definiciji i deklaraciji; ali ne znam kako da promenim tamo gde se poziva funkcija odnosno kreira objekat jer ne znam gde je to niti kako. Mozes li da mi otprilike kazes gde da 'kopam' ?

Belphegor
6.2.2012, 17:34
Daj fragment koda sa kojim imas problem, ovako samo mozemo da nagadjamo.

orange47
6.2.2012, 17:44
Daj fragment koda sa kojim imas problem, ovako samo mozemo da nagadjamo.

evo ovde je: http://through-the-interface.typepad.com/through_the_interface/files/simpledynprops2.zip
trebalo bi nekako da ovo:

m_bstrDisplayName = L"CategorizedProperty";

bude parametar a ne konstanta.

Belphegor
6.2.2012, 18:14
Mozda gresim ali mislim da ne moze, po ovome (http://msdn.microsoft.com/en-us/library/aehcbwe0%28v=vs.80%29.aspx):


template< typename T >
class CComObject : public T
Posto je templejt pa ne moze da zna kakve sve konstruktore (sa koliko parametara i tipova) ima taj tip ( T ) pa se oslanja samo na default konstruktor.

Jedino da dodas metodu u CCategorizedProperty:


class CCategorizedProperty ...
{
...
void SetDisplayName(const bstring_tip& s)
{
m_bstrDisplayName = s;
}
pa onda pozoves posebno posle:

...
com_util::CheckError(CComObject<CCategorizedProperty>::CreateInstance(&m_pCategorized));
m_pCategorized->AddRef();
_com_util::CheckError(CComObject<CEnumProperty>::CreateInstance(&m_pEnum));
m_pEnum->AddRef();
_com_util::CheckError(pPropMan->AddProperty(m_pSimple));
_com_util::CheckError(pPropMan->AddProperty(m_pCategorized));
_com_util::CheckError(pPropMan->AddProperty(m_pEnum));
...

m_pCategorized->SetDisplayName( "IME" );


Nisam nikad ucio ATL, trebalo bi to da "kopas" da vidis koja su pravila oko koriscenja.

orange47
7.2.2012, 12:07
jel mozes da mi kazes kako bi izgledala deklaracija te metode 'SetDisplayName'?
edit: nema veze, uspelo je kompajliranje, hvala.