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

文章翻譯 文章翻譯
文章編號: 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.0235
    import "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。

屬性

文章編號: 220137 - 上次校閱: 2006年9月29日 - 版次: 2.3
這篇文章中的資訊適用於:
  • Microsoft Platform Software Development Kit-January 2000 Edition?應用於:
    • Microsoft Windows NT Server 4.0 Standard Edition
    • Microsoft Windows NT Workstation 4.0 Developer Edition
關鍵字:?
kbmt kbbug kbpending KB220137 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:220137
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com