Отвечая на мой собственный вопрос в интересах любого, кто найдет эту ветку в будущем. Однако, пожалуйста, обратите внимание, что я просто догадываюсь здесь, основываясь на экспериментах ... кажется, это работает, по крайней мере, в моей конкретной ситуации, но я не знаю.
Во-первых, в некоторый соответствующий заголовочный файл (возможно, Hidden.h) поместите следующее, заменив недавно сгенерированный UUID на недавно сгенерированный UUID:
#ifndef __Hidden_h__
#define __Hidden_h__
extern "C" {
#ifndef __IHidden_FWD_DEFINED__
#define __IHidden_FWD_DEFINED__
typedef interface IHidden IHidden;
#endif // __IHidden_FWD_DEFINED__
#ifndef __IHidden_INTERFACE_DEFINED__
#define __IHidden_INTERFACE_DEFINED__
EXTERN_C const IID IID_IHidden;
MIDL_INTERFACE("a newly generated UUID")
IHidden : public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE get_Something (
long __RPC_FAR *pVal ) = 0;
};
#endif // __IHidden_INTERFACE_DEFINED__
}
#endif // __Hidden_h__
Чтобы узнать, как определить другие типы параметров и тому подобное для функции, обратитесь к заголовку C ++, который был сгенерирован MIDL из вашего файла IDL.
Далее, в заголовке для любого класса, для которого вы хотите реализовать этот интерфейс, добавьте интерфейс к объявлению класса:
class ATL_NO_VTABLE CBlah :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBlah, &CLSID_CBlah>,
public ISupportErrorInfo,
public IConnectionPointContainerImpl<CBlah>,
public IBlah,
public IHidden
Также добавьте его в COM_MAP:
BEGIN_COM_MAP(CBlah)
COM_INTERFACE_ENTRY(IBlah)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY(IHidden)
END_COM_MAP
И с этого момента достаточно просто добавить в класс стандартные объявления C ++ и определения функций интерфейса:
public:
STDMETHOD(get_Something)(long *pVal);
(...)
STDMETHODIMP CBlah::get_Something(long *pVal)
{
if ( !pVal )
{
(error handling)
}
*pVal = 37;
return S_OK;
}
Надеюсь, это поможет кому-то в будущем. Я также надеюсь, что это не повредит мне, потому что это неправильно. Как я уже сказал, похоже, это работает.