MIDL 變更產生的型別程式庫的識別項的大小寫

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:220137
本文已封存。本文係以「現狀」提供且不會再更新。
徵狀
當個只有大小寫不同的兩個識別項會將第二個識別項的大小寫變更以反映的第一個大小寫。
發生的原因
IDL] 和 [型別程式庫並不區分大小寫的設計。由 MIDL 產生型別程式庫所呼叫的 Ole 自動化程式碼正在第一次出現的名稱和相同名稱的任何後續項目 [IDL 中即使是在不同的內容相同的。
解決方案
您可以使用來避免這個問題的解決方法如下:
  • 到另一個,匯入一個 IDL 檔案的情況中這個情況發生的可能性是更高。代替 IDL 檔案匯入另一個 IDL,匯入對應的型別程式庫]。
  • 請確定相同的名稱不是已經 IDL 檔案中呈現時引入新的識別項。
  • 對應型別程式庫與元件文件中所產生的識別項。這不真的太困難,因為只有大小寫不同的識別項將會在不同的內容,其中一個方法,另一個參數、 結構等等。這將有助於避免元件文件中的不一致。
狀況說明
這種行為是經過設計規劃的。
其他相關資訊
如果 IDL 檔案具有不同的兩個具有相同的識別項名稱但不同只在最的情況下則在 MIDL 產生型別程式庫將變更為相同大小寫與第一個第二個識別項。

重現問題的步驟

  1. 建立 IDL 檔案 (name.idl)。請參閱下列的範例:
    // Test program to demonstrate capitalization bugs in MIDL 5.02.0235import "oaidl.idl";import "ocidl.idl";   [      uuid(DB9DDB0D-8834-11D1-8278-00A024A41CC8),      dual,      oleautomation,   ]   interface Interface1 : IDispatch {      [ id(4), helpstring("") ]      HRESULT OtherMethod (         // This parm name will affect the case of the subsequent method name.         [in] VARIANT_BOOL mYnAme );   };   [      uuid(DB9DDB0C-8834-11D1-8278-00A024A41CC8),      dual,      oleautomation,   ]   interface Interface2 : IDispatch {      [ id(5), helpstring("") ]      // The method name gets changed.      HRESULT MyName ();   };[  uuid(2A216780-BC52-11D2-B94F-00C04F81B63A), version(1.0),]library MIDLTST{   importlib("stdole32.tlb");   [      uuid(65B5C950-883D-11D1-8278-00A024A41CC8),      helpstring("Exercise various supported types.")   ]   coclass MIDLTest {      [default] interface Interface1;      interface Interface2;   };};						
  2. 請使用 MIDL 編譯器產生型別程式庫。使用命令 MIDL name.idl
  3. 開啟 OLEVIEW 產生的型別程式庫。請參閱下面的 OLEVIEW 輸出。
    // Generated .IDL file (by the OLE/COM Object Viewer)// // typelib filename: <could not determine filename>[  uuid(2A216780-BC52-11D2-B94F-00C04F81B63A),  version(1.0)]library MIDLTST{    // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}    importlib("STDOLE2.TLB");    // Forward declare all types defined in this typelib    interface Interface1;    interface Interface2;    [      uuid(65B5C950-883D-11D1-8278-00A024A41CC8),      helpstring("Exercise various supported types.")    ]    coclass MIDLTest {        [default] interface Interface1;        interface Interface2;    };    [      odl,      uuid(DB9DDB0D-8834-11D1-8278-00A024A41CC8),      dual,      oleautomation    ]    interface Interface1 : IDispatch {        [id(0x00000004)]        HRESULT OtherMethod([in] VARIANT_BOOL mYnAme);    };    [      odl,      uuid(DB9DDB0C-8834-11D1-8278-00A024A41CC8),      dual,      oleautomation    ]    interface Interface2 : IDispatch {        [id(0x00000005)]        HRESULT mYnAme();    };};						
  4. 這裡的方法名稱 MyName Interface2 中已經變更成 mYnAme。
MIDL TypeLib oleprog

警告:本文為自動翻譯

內容

文章識別碼:220137 - 最後檢閱時間:12/05/2015 13:07:22 - 修訂: 2.3

Microsoft Platform Software Development Kit-January 2000 Edition

  • kbnosurvey kbarchive kbmt kbbug kbpending KB220137 KbMtzh
意見反應