У меня есть простой файл .IDL (iface.idl), который описывает интерфейс на основе IUnknown:
import "unknwn.idl";
[
uuid(80DFDD28-F033-431e-B027-CDD2078FC78A)
]
interface ISunPathCalc : IUnknown {
HRESULT Square([in, out] long * pVal);
HRESULT Cube([in, out] long * pVal);
};
При попытке скомпилировать его с midl /header iface.h iface.idl
я получаю 3 файла: iface.h, iface_i.c и iface_p.c.Файл iface.h содержит объявление C ++ об интерфейсе ISunpathCalc:
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("80DFDD28-F033-431e-B027-CDD2078FC78A")
ISunPathCalc : public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE Square(
/* [out][in] */ long *pVal) = 0;
virtual HRESULT STDMETHODCALLTYPE Cube(
/* [out][in] */ long *pVal) = 0;
};
#else /* C style interface */
Оставшаяся большая часть этого файла содержит ненужные файлы языка C.
Q: Естьспособ сказать MIDL генерировать только часть C ++ заголовка?Можно ли отключить генерацию файлов iface_i.c и iface_p.c и заставить MIDL вместо этого генерировать определение C ++?
UPD1:
Я пыталсядобавить атрибут [local] как указано здесь :
[
local,
uuid(80DFDD28-F033-431e-B027-CDD2078FC78A)
]
, но безуспешно.