2011-10-15 34 views
2

我试图从PSDK生成的IDL文件之一生成类型库,但midl会话成功完成(ERRORLEVEL 0)没有生成.tlb文件。目前我不知道什么是错的。请指教。_从PSDK IDL文件生成PASCAL绑定文件的问题

下面是一个冗长的输出形式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 
+1

问题的“Delphi”或“Pascal”部分在哪里? AFAICT,这完全是一个'MIDL'问题。除了标签中没有提及'Delphi',除了标题外没有提及'Pascal'。 –

回答

1

MIDL有,如果有什么产生不产生输出的这个有点令人讨厌的习惯。您是否确认emptyvc.idl文件中有可以用typelib(类,接口,库指令等)表示的类型?

+0

嗯,有人删除[delphi]标签,注定要表明我有点MSVC n00b。不,我没有确认,但'.idl'文件对我非常好的眼睛来说非常有效。目前我想出了什么中间产生'.c'和'.h',然后midl在它们上面完全沉默了'cl',这反过来又使预处理步骤失败。 – OnTheFly

+0

更新了CL侧的Q.你有什么想法可能会导致问题,CL或输入.idl文件(PSDK是更新的MS C编译器)? – OnTheFly

+0

.idl文件是否包含一个名为类名的库块? –