Мой файл ODL выглядит так:
import "oaidl.idl";
import "ocidl.idl";
[oleautomation, uuid(/* redacted */)]
interface ISomething : IUnknown
{
HRESULT DoSomething(
[in]BSTR User,
[in]VARIANT Object,
[in]SAFEARRAY Array // may be NULL
);
}
Я получаю ошибки:
1>. \ Something.odl (17): ошибка MIDL2139: тип параметра не может быть производным от void или void *: [Введите 'PVOID' (параметр 'Array')] 1>. \ Something.odl (17): ошибка MIDL2105: указатель / массив не определяет размер: [Поле 'rgsabound' структуры 'tagSAFEARRAY' (параметр 'Массив')] 1>. \ Something.odl (17): ошибка MIDL2465: Структуры, содержащие соответствующие массивы, должны передаваться ссылка. Дополнительные сведения см. В MSDN: [Struct 'tagSAFEARRAY' (параметр 'Array')]
Если я изменю тип с SAFEARRAY
на SAFEARRAY*
(что я не считаю правильным?), Я получаю разные ошибки:
1>. \ Something.odl (17): ошибка MIDL2139: тип параметра не может быть производным от void или void *: [Введите 'PVOID' (параметр 'Array')] 1>. \ Something.odl (17): ошибка MIDL2105: указатель / массив не определяет размер: [Поле 'rgsabound' структуры 'tagSAFEARRAY' (параметр 'Массив')]
Это просто случай, когда мне нужно включить другие заголовки? Я компилирую с помощью компилятора MIDL в VS2013, видимо, командная строка выглядит так:
/iid "./source/Something_i.c" /h "Something.h" /W1 /char signed /notlb /app_config /nologo /dlldata "./source/Something_dlldata.c" /proxy "./source/Something_p.c"