_ Проблема с созданием файла привязок PASCAL из файла PSDK IDL

Я пытался создать библиотеку типов из одного из отправленных PSDK файлов IDL, но пока midl сеанс завершился успешно (ERRORLEVEL 0), файл .tlb не был создан. В настоящее время я понятия не имею, что не так. Пожалуйста, порекомендуйте.

Вот подробная форма вывода midl сеанса:

>midl emptyvc.idl /tlb .\emptyvc.tlb /I "\Program Files\Microsoft SDKs\Windows\v7.0\Include" /W4
Microsoft (R) 32b/64b MIDL Compiler Version 7.00.0555
Copyright (c) Microsoft Corporation. All rights reserved.
Processing \Program Files\Microsoft SDKs\Windows\v7.0\Include\emptyvc.idl
emptyvc.idl
Processing \Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl
objidl.idl
Processing \Program Files\Microsoft SDKs\Windows\v7.0\Include\unknwn.idl
unknwn.idl
Processing \Program Files\Microsoft SDKs\Windows\v7.0\Include\wtypes.idl
wtypes.idl
Processing \Program Files\Microsoft SDKs\Windows\v7.0\Include\basetsd.h
basetsd.h
Processing \Program Files\Microsoft SDKs\Windows\v7.0\Include\guiddef.h
guiddef.h
\Program Files\Microsoft SDKs\Windows\v7.0\Include\wtypes.idl(671) : warning MIDL2111 : identifier length exceeds 31 characters : STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE
\Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl(2308) : warning MIDL2111 : identifier length exceeds 31 characters : FMTID_MediaFileSummaryInformation
\Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl(2499) : warning MIDL2111 : identifier length exceeds 31 characters : tagEOLE_AUTHENTICATION_CAPABILITIES
\Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl(2518) : warning MIDL2111 : identifier length exceeds 31 characters : EOLE_AUTHENTICATION_CAPABILITIES
\Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl(2616) : warning MIDL2111 : identifier length exceeds 31 characters : tagRPCOPT_SERVER_LOCALITY_VALUES
\Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl(2652) : warning MIDL2111 : identifier length exceeds 31 characters : COMGLB_EXCEPTION_DONOT_HANDLE_FATAL
\Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl(2653) : warning MIDL2111 : identifier length exceeds 31 characters : COMGLB_EXCEPTION_DONOT_HANDLE_FATAL
\Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl(2654) : warning MIDL2111 : identifier length exceeds 31 characters : COMGLB_EXCEPTION_DONOT_HANDLE_ANY
\Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl(2660) : warning MIDL2111 : identifier length exceeds 31 characters : COMGLB_RPC_THREADPOOL_SETTING_DEFAULT_POOL
\Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl(2661) : warning MIDL2111 : identifier length exceeds 31 characters : COMGLB_RPC_THREADPOOL_SETTING_PRIVATE_POOL
\Program Files\Microsoft SDKs\Windows\v7.0\Include\objidl.idl(3359) : warning MIDL2111 : identifier length exceeds 31 characters : APTTYPEQUALIFIER_NA_ON_IMPLICIT_MTA
Processing \Program Files\Microsoft SDKs\Windows\v7.0\Include\oleidl.idl
oleidl.idl
\Program Files\Microsoft SDKs\Windows\v7.0\Include\oleidl.idl(329) : warning MIDL2111 : identifier length exceeds 31 characters : OLEMISC_RENDERINGISDEVICEINDEPENDENT
\Program Files\Microsoft SDKs\Windows\v7.0\Include\oleidl.idl(339) : warning MIDL2111 : identifier length exceeds 31 characters : OLEMISC_IGNOREACTIVATEWHENVISIBLE
Processing \Program Files\Microsoft SDKs\Windows\v7.0\Include\oaidl.idl
oaidl.idl
Processing \Program Files\Microsoft SDKs\Windows\v7.0\Include\oaidl.acf
oaidl.acf
\Program Files\Microsoft SDKs\Windows\v7.0\Include\emptyvc.idl(108) : warning MIDL2392 : [local] procedure without [call_as] : [ Procedure 'Initialize'  ]
\Program Files\Microsoft SDKs\Windows\v7.0\Include\emptyvc.idl(157) : warning MIDL2392 : [local] procedure without [call_as] : [ Procedure 'InitializeEx'  ]
** ERRORLEVEL is 0 at this point **

Используемые детали и инструменты:

  • немодифицированный emptyvc.idl из Windows SDK версии 7.0
  • MIDL версия 7.00.0555
  • CL версия 14.00.50727.42

ПРИМЕЧАНИЕ: я считаю, что это не проблема среды, так как первое, что я попытался скомпилировать, - это скомпилировать другой файл .idl, и я получил результат .tbl, как и ожидалось, который, в свою очередь, был обработан TLIBIMP без каких-либо проблем.


Вот вывод CL (который полностью отключил MIDL):

dlldata.c
dlldata.c(24) : error C2061: syntax error : identifier 'PROXYFILE_LIST_START'
dlldata.c(24) : error C2059: syntax error : ';'
dlldata.c(31) : error C2146: syntax error : missing ';' before identifier 'DLLDATA_ROUTINES'
dlldata.c(38) : fatal error C1004: unexpected end-of-file found

person OnTheFly    schedule 15.10.2011    source источник
comment
Где Delphi или Pascal часть вашего вопроса? AFAICT, это строго MIDL вопрос. Delphi не упоминается, кроме тегов, и не упоминается Pascal, кроме как в заголовке.   -  person Ken White    schedule 15.10.2011


Ответы (1)


У MIDL есть эта несколько раздражающая привычка не производить вывод, если нечего производить. Подтвердили ли вы, что в файле emptyvc.idl есть типы, которые могут быть представлены в библиотеке типов (классы, интерфейсы, директива библиотеки и т. Д.)?

person ReinstateMonica Larry Osterman    schedule 16.12.2011
comment
Хм, кто-то удалил тег [delphi], предназначенный для обозначения того, что я вроде как MSVC n00b. Нет, я не подтвердил, но .idl файл выглядит вполне подходящим для моего довольно тупого глаза. В настоящее время я выяснил, какие промежуточные .c и .h производятся, а затем midl запускается на них с полной тишиной cl, что, в свою очередь, не позволяет выполнить этап предварительной обработки. - person OnTheFly; 16.12.2011
comment
Обновлен Q на стороне CL. У вас есть идеи, что может вызвать проблему, CL или входной файл .idl (PSDK новее, чем компилятор MS C)? - person OnTheFly; 16.12.2011
comment
Содержит ли файл .idl блок библиотеки с именем и классами в нем? - person ReinstateMonica Larry Osterman; 17.12.2011
comment
Вы имеете в виду библиотеку как в Microsoft расширение для IDL? Похоже, там такого блока нет, но вот полный источник IDL: pastebin.com/kxD6YgbF Выглядит корректно, но в результате dlldata.c не удается скомпилировать с выводом, который я вставил выше. - person OnTheFly; 18.12.2011
comment
Я бы посмотрел на исходный код, но я не верю, что MIDL выдаст файл tlb без директивы библиотеки в файле IDL. - person ReinstateMonica Larry Osterman; 18.12.2011