Экспорт структуры, определенной в winbase.h с IDL ATL - PullRequest
0 голосов
/ 08 января 2012

Это мой метод, определенный в IDL:

[id(3), helpstring("method GetBatteryStatus")] 
HRESULT GetBatteryStatus([out,retval] SYSTEM_POWER_STATUS_EX2* batteryStatus);

SYSTEM_POWER_STATUS_EX2 - это структура, определенная в winbase.h, и этот проект является проектом ATLSmartPhone, winbase.h взят из SDK от Microsoft.

Когда я компилирую проект, ошибка:

error MIDL2025 : syntax error : expecting a type specification near "SYSTEM_POWER_STATUS_EX2"

Если я добавлю import "winbase.h" в начало файла IDL, ошибка будет:

error MIDL2003 : redefinition : size_t; error MIDL2003 : redefinition : _LARGE_INTEGER;.....

Тогда, если я добавлю typedef в IDL:

typedef[public,uuid(37DE998A-6787-415a-A191-861C315D1248),helpstring("Power Status")]
struct _SYSTEM_POWER_STATUS_EX2 {
  ...
  ...
} SYSTEM_POWER_STATUS_EX2;

Ошибка будет:

error C2011: '_SYSTEM_POWER_STATUS_EX2' : 'struct' type redefinition.

Так как мне экспортировать структуру SYSTEM_POWER_STATUS_EX2, которая была определена в winbase.h с IDL?

1 Ответ

0 голосов
/ 27 мая 2012

Вы можете записать IDL версию SYSTEM_POWER_STATUS_EX2 в отдельном файле IDL и импортировать ее только для MIDL:

cpp_quote("#if 0")
import "fake.idl";
cpp_quote("#else")
cpp_quote("#include <orginial_header>")
cpp_quote("#endif")
...