Re: Trouble instantiatig callback object defined out-of-process
Igor Tandetnik wrote:
Don't derive ISink from IDispatch. Derive it from IUnknown, mark with
[oleautomation] attribute in IDL. Or else, make it a dispinterface and
use IDispEventImpl to implement it. It does not make sense to have a
dual interface for a callback.
Here's what I've done, but it does not build. Can you point out any
problems here? With my current state of knowledge I could be making a
dozen errors and never find the right magic combination. Are there any
published examples of doing this?
// .idl
[
oleautomation,
uuid(934A9236-18CF-415A-A3C7-694AE4BDA489),
nonextensible,
helpstring("IMySink Interface"),
pointer_default(unique)
]
interface IMySink : IUnknown {
[id(1), helpstring("method Update")] HRESULT Update([in] BSTR bsUpdate);
};
// .h
class ATL_NO_VTABLE CMySink :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMySink, &CLSID_MySink>,
public IMySink
{
....
};
Result of trying to create it (in-process) is:
error C2664: 'ATL::CComObject<Base>::CreateInstance' : cannot convert
parameter 1 from 'CMySink **' to 'ATL::CComObject<Base> **'
1> with
1> [
1> Base=CMySink
1> ]
--
Scott McPhillips [MVP VC++]