Jam*_*ond 2 com idl com-interop typelib midl
我和被称为COM Interop的野兽长期相遇...
我目前正在尝试从OLE/COM对象查看器生成的.idl文件生成.tlb.但是,当尝试运行Midl.exe来编译它时,我收到一个错误:
.\Sim.API.IDL(236) : error MIDL2025 : syntax error : expecting a type s
pecification near "ImportFileStatus"
Run Code Online (Sandbox Code Playgroud)
我的.idl文件超过1000行,所以我不特别想在这里发帖,我相信感兴趣的部分是:
typedef [uuid(980B172E-19C1-389A-BB74-29A54737C5B4), version(1.0) ,
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "Sim.API.ImportFileResult")
]
struct tagImportFileResult {
ImportFileStatus _status;
LPSTR _message;
} ImportFileResult;
Run Code Online (Sandbox Code Playgroud)
然后几行......
typedef [uuid(A4B9A0FF-A2D4-3EC5-AB7E-69311B9122C8), version(1.0) ,
custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "Sim.API.ImportFileStatus")
]
enum {
ImportFileStatus_Success = 0,
ImportFileStatus_VersionMismatch = 1,
ImportFileStatus_Failure = 2
} ImportFileStatus;
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,应该尊重这些以修复类型规范错误.但是,如果我这样做,我会遇到一个新问题.
midl\oleaut32.dll : warning MIDL2368 : error generating type library, ignored :
Could not set UUID : tagImportFileResult (0x800288C6)
Run Code Online (Sandbox Code Playgroud)
我对idl格式非常不熟悉,并且使用midl.exe,也许我正在做的事情有些明显错误?
一如既往的任何帮助将不胜感激:)
你是对的,交换声明是为了让MIDL满意.OleView.exe确实不会按原始顺序生成声明.我认为它按类型分组,类型lib的组织方式.
您收到的消息只是一个警告,而不是错误.它是由结构名称的别名不同引起的.您可以放心地忽略它,因为代码不会使用"tagImportFileResult"标识符.但是你可以通过使标签名称与typedef名称相同来摆脱它:
typedef [..]
struct ImportFileResult {
//...
} ImportFileResult;
Run Code Online (Sandbox Code Playgroud)
这是关于这个主题的知识库文章.
| 归档时间: |
|
| 查看次数: |
3396 次 |
| 最近记录: |