为了将来发现此线程的任何人的利益,回答我自己的问题。但是,请注意,我只是在这里猜测,基于实验......它似乎有效,至少在我的具体情况下,但我不知道。
首先,在一些适当的头文件(可能是 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__
有关如何为函数定义其他类型的参数等,请参阅 MIDL 从您的 IDL 文件生成的 C++ 头文件。
接下来,在要实现此接口的任何类的标头中,将该接口添加到类声明中:
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;
}
我希望这对将来的某人有所帮助。我也希望它不会因为它不正确而伤害我。不过,正如我所说,它似乎有效。