У меня есть простой файл .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.
В: Есть ли способ указать MIDL генерировать только часть заголовка C ++? Можно ли отключить генерацию файлов iface_i.c и iface_p.c и заставить MIDL вместо этого генерировать определение C ++?
UPD1:
Я попытался добавить атрибут [local], как указано здесь :
[
local,
uuid(80DFDD28-F033-431e-B027-CDD2078FC78A)
]
но безуспешно.
#define
s не являются процессами, как ожидалось, и я предполагаю, что это реальная проблема, которую вам нужно решить. . - person sharptooth   schedule 07.06.2011