Al momento sei offline in attesa che la connessione Internet venga ristabilita

MIDL viene modificato il caso di identificatore nella libreria dei tipi generata

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 220137
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Sintomi
Quando sono presenti due identificatori che differiscono solamente nel caso, caso dell'identificatore secondo viene modificato per riflettere il caso del primo.
Cause
La libreria IDL e tipo non fanno distinzione tra maiuscole e minuscole in base alla progettazione. Il codice di automazione OLE che viene chiamato da MIDL per generare la libreria dei tipi è accettando la prima occorrenza di un nome e tutte le occorrenze successive dello stesso nome nell'IDL, anche se è in contesto diverso, lo stesso.
Risoluzione
Soluzioni alternative che è possibile utilizzare per evitare questo problema sono:
  • In caso di Importa un file IDL in un altro, la possibilità che questo accada è superiore. Invece di importazione file IDL in un altro IDL, importare una libreria dei tipi corrispondente.
  • Assicurarsi che lo stesso nome non sia già presente nel file IDL quando l'introduzione di un nuovo identificatore.
  • Associare l'identificatore generato nella libreria dei tipi nella documentazione di componenti. Questo veramente non è difficile dato gli identificatori che differiscono solamente nel caso si sarà in un contesto diverso, uno un metodo e un altro, dato che un parametro, la struttura e così via. Ciò consentirà di evitare la discrepanza nella documentazione del componente.
Status
Questo comportamento legato alla progettazione.
Informazioni
Se un file IDL dispone di due diversi identificatori con lo stesso nome ma diversi solo nel caso di, quindi il MIDL generato la libreria dei tipi assumerà l'identificatore del secondo caso stesso come primo.

Procedura per riprodurre il problema

  1. Creare un file IDL (name.idl). Vedere l'esempio riportato di seguito:
    // 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. Utilizzare compilatore MIDL per generare la libreria dei tipi. Utilizzare il name.idl di comando MIDL
  3. Aprire la libreria di tipo generata in OLEVIEW. Vedere il seguente output 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. Qui è stato modificato il nome del metodo nome in Interface2 per mionome.
Libreria dei tipi di MIDL oleprog

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 220137 - Ultima revisione: 12/05/2015 13:07:16 - Revisione: 2.3

Microsoft Platform Software Development Kit-edizione gennaio 2000

  • kbnosurvey kbarchive kbmt kbbug kbpending KB220137 KbMtit
Feedback