2
我一直有被稱爲COM互操作的野獸延長遇到一個.TLB ...問題使用MIDL來創建的.idl「期待型規格」
目前我正在試圖生成一個.TLB從OLE/COM對象查看器生成的.idl文件。然而,當試圖運行MIDL.EXE編譯它,我得到一個錯誤:
.\Sim.API.IDL(236) : error MIDL2025 : syntax error : expecting a type s
pecification near "ImportFileStatus"
我.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;
那麼幾行後...
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;
我有一種感覺,這些都應該以固定的型號規格誤差被大家敬仰。但是,如果我這樣做,我會遇到一個新問題。
midl\oleaut32.dll : warning MIDL2368 : error generating type library, ignored :
Could not set UUID : tagImportFileResult (0x800288C6)
我對IDL格式,並配合使用MIDL.EXE的相當陌生,或許有一些公然錯了我在做什麼?
一如往常的任何幫助,將不勝感激:)
感謝漢斯,我永遠不會注意到第二個錯誤只是一個警告:P。順便提一下,是否有更好的方法來生成不會改變順序的IDL?你是否還知道COM Interop的其他有用資源?再次感謝! – Jambobond 2010-08-02 13:28:21
當然,只要問原始作者他的.idl文件。你會得到兩個可能的答案中的一個:「沒問題!」或者「你在開玩笑,這是受版權保護的軟件,你的許可明文禁止你這樣做!」。或者你永遠不會聽到任何回聲,不可能因爲它的可能年齡。 – 2010-08-02 13:45:46
其實我是原作者^^或者至少我的公司是,長的故事,但這基本上是爲了避免使用對象屬性時的'propput'而不是'propputref'問題。所以我必須使用Regasm生成並註冊原始.dll,然後編輯.IDL以將propputref替換爲propput,最後使用Midl重新生成tlb。 FUN !!!! :P – Jambobond 2010-08-02 14:14:48