I have a lot of experience in C++ but am new to COM, MFC and MIDL. I'm trying to create a 32 bit COM server from an IDL file supplied by a third party. The IDL section looks like this:
[uuid(3CA6AC95-6F14-4D36-93BC-A9AAC9230FEA)]
dispinterface IMyEvent
{
properties:
methods:
[id(1), helpstring("do the connect")]
SCODE Connect([in] IDispatch *GetBackToMe);
[id(2), helpstring("do the disconnect")]
SCODE Disconnect();
};
[uuid(5695B1AB-0D7C-4C8B-AE07-6BF8F8B10393)]
coclass MyEvent
{
[default] dispinterface IMyEvent;
};
MIDL generated the following:
MIDL_DEFINE_GUID(IID, DIID_IMyEvent, 0x3CA6AC95, 0x6F14, 0x4D36, 0x93, 0xBC, 0xA9, 0xAA, 0xC9, 0x23, 0x0F, 0xEA);
MIDL_DEFINE_GUID(CLSID, CLSID_MyEvent, 0x5695B1AB, 0x0D7C, 0x4C8B, 0xAE, 0x07, 0x6B, 0xF8, 0xF8, 0xB1, 0x03, 0x93);
typedef interface IMyEvent IMyEvent;
typedef class MyEvent MyEvent;
EXTERN_C const IID DIID_IMyEvent;
MIDL_INTERFACE("3CA6AC95-6F14-4D36-93BC-A9AAC9230FEA")
IMyEvent : public IDispatch
{
};
EXTERN_C const CLSID CLSID_MyEvent;
I have written the following so far:
class MyEvent
{
public:
SCODE Connect(IDispatch *GetBackToMe);
SCODE Disconnect();
};
SCODE MyEvent::Connect(IDispatch *GetBackToMe)
{
// TODO
return 0;
}
SCODE MyEvent::Disconnect()
{
// TODO
return 0;
}
What glue do I need to make this work?
MyEventmust implementIMyEvent, among other things. PS: you should use what's called connection points to do callbacks devblogs.microsoft.com/oldnewthing/20130611-00/?p=4113