Re: Need help .. how to return an interface of a generic class in ATL COM
Ah, you mean you want to expose an internally implemented
COM object. For starters, your class should also derive from
CComObjectRootEx<thread_model> like your public COM
object. It should specify its own interface map as well, in this
case with the single interface it implements. Then this is the code
to create it internally (error handling omitted for brevity):
HRESULT outerobj::CreateInnerObj(IGenericclass1** pItf) {
CComObject<Genericclass1>* pObj = NULL;
HRESULT hr = CComObject<Genericclass1>::CreateInstance(&pObj);
pObj->GetUnkown()->AddRef();
// Init your object here with extra parameters if needed
// since its constructor cannot accept parameters
// pObj->Init(<extra_parameters>);
hr = pObj->GetUnknown()->QueryInterface(IID_IGenericclass1,
(void**)pItf);
pObj->GetUnknown()->Release;
pObj = NULL;
return hr;
}
OTOH, if you don't want to create a new object each time your
client asks for one, but instead wish to always return the same
instance of the internal object, have a look at the following FAQ
article:
http://vcfaq.mvps.org/com/12.htm
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@mvps.org
MVP VC FAQ: http://vcfaq.mvps.org
=====================================
<santhanam.krish1984@gmail.com> wrote in message
news:1189060261.316163.17920@k79g2000hse.googlegroups.com...
I have created an simple ATL object from the menu Insert->New Atl
Object.
After that i have created a class by selecting Insert->New Class using
VC++ IDE.
While creating the class we have two options(i.e.ATL class or generic
class)....I specified it as a generic class.
Now my problem is i am not able to create an instance for the new
class i added.
The header file generated for my generic class is below.
// Genericclass1.h: interface for the Genericclass1 class.
//
//////////////////////////////////////////////////////////////////////
#include "assgnlgc2.h"
#if !
defined(AFX_GENERICCLASS1_H__652DD0EE_1B63_44B1_B8E9_77EECC312441__INCLUDED_)
#define
AFX_GENERICCLASS1_H__652DD0EE_1B63_44B1_B8E9_77EECC312441__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class Genericclass1:public IGenericclass1
{
public:
Genericclass1();
virtual ~Genericclass1();
};
#endif // !
defined(AFX_GENERICCLASS1_H__652DD0EE_1B63_44B1_B8E9_77EECC312441__INCLUDED_)
Now i have to create an insatanec for the above class (Genericclass1)
and return its interface (IGenericclass1)....
please help me and let me know if u need more clarification...
On Sep 5, 9:27 pm, "Alexander Nickolov" <agnicko...@mvps.org> wrote:
Somehow I doubt you use the terms in heir original meaning...
A generic is a template class in the .NET and Java worlds.
If you mean interfaces, you need to obtain an interface pointer
to the other object, e.g. either create a new instance or have
the client pass it to you.
If the above doesn't help you - please clarify using precise terms.
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnicko...@mvps.org
MVP VC FAQ:http://vcfaq.mvps.org
=====================================
<santhanam.krish1...@gmail.com> wrote in message
news:1188975363.511200.256870@k79g2000hse.googlegroups.com...
Hi,
I have created two ATLCOM objects . Each ATL Object has inherited
from its generic class. i just want to get the interface of the other
ATL object. For example, the Object 1 need to get the interface of the
generic class 2. please help me out from this with sample code and
please let me know if you need more clarification on this.- Hide quoted
text -
- Show quoted text -