Re: Init COM interfaces
try find the progid or clsid in OLEView, or check if the exe contains a type
library.
--
Sheng Jiang
Microsoft MVP in VC++
"Alex" <alsim123@hotmail.com> wrote in message
news:a69d3be0-2c91-4ec4-9455-9caebf30b6f8@k13g2000hse.googlegroups.com...
Hi, everybody.
I've got to implement some COM server in my C++ application. This COM
was written as exe. The only documentation I have is some example in
VB:
Dim oI As Object
oI = CreateObject("SomeCOM.SomeInterface")
oI.Init()
.................................
.................................
.................................
From my C++ code I was able to get the pointer to IUnkonw:
CLSID clsid;
hresult = ::CLSIDFromProgID("SomeCOM.SomeInterface", &clsid);
CoInitialize( NULL );
LPUNKNOWN m_punk;
hresult = ::CoCreateInstance(clsid, NULL, CLSCTX_SERVER,
IID_IUnknown,(LPVOID FAR *) &m_punk);
It works OK so far. But then I must know, I think, the class or name
space where this COM was created, so I can declare pointer to the
interface:
COMNameSpace::ISomeInterface* pI = NULL;
m_punk->QueryInterface(IID_INTERFACE, (LPVOID FAR *)&pI);
But this VB example doesn't give me any idea about this COM class
name. So my question is - do I have to ask this COM distributors for
some additional information - Interface Classes/Namespaces, GUIDs...?
Or something can be done just knowing that this COM object was
registered and ProgID is "SomeCOM.SomeInterface" ?
By the way, in C# I just could add the corresponding COM reference
and it works OK:
SomeCOM.SomeInterface pI = new SomeCOM.SomeInterface();
pI->Init();
So because my message was kind of long I'll repeat the question: If
want to implement given COM in my C++ project am I entitled to ask
from the COM distributors anything else (like some.tlb or some.dll
file which can be imported), the information about classes/namespaces
of this com and interfaces, GUIDs? Or something can be done, just
knowing the ProgID("SomeCOM.SomeInterface") and looking through the
registry in search of corresponding GUIDs?
Thanks,
Alex