Avvisi di interoperabilità
Gli avvisi di interoperabilità supportano l'interazione con client COM.
In questa sezione
Regola |
Descrizione |
---|---|
Un metodo pubblico o protetto è contrassegnato utilizzando l'attributo System.Runtime.InteropServices.DllImportAttribute.Non è possibile individuare la libreria non gestita né associare il metodo a una funzione nella libreria. |
|
Un metodo pubblico o protetto in un tipo pubblico presenta l'attributo System.Runtime.InteropServices.DllImportAttribute (implementato anche dalla parola chiave Declare in Visual Basic).Questi metodi non devono essere esposti. |
|
CA1402: Evitare gli overload nelle interfacce visibili a COM |
Quando i metodi sottoposti a overload vengono esposti ai client COM, solo il primo overload di metodo conserva il proprio nome.Gli overload successivi vengono rinominati in modo univoco aggiungendo al nome un carattere di sottolineatura (_) e un numero intero che corrisponde all'ordine di dichiarazione dell'overload. |
CA1403: I tipi layout automatici non devono essere visibili a COM |
Un tipo di valore visibile a COM è contrassegnato utilizzando l'attributo System.Runtime.InteropServices.StructLayoutAttribute impostato su LayoutKind.Auto.Il layout di tali tipi può variare a seconda delle versioni di .NET Framework, con conseguente compromissione delle funzionalità dei client COM che prevedono un layout specifico. |
Viene effettuata una chiamata al metodo Marshal.GetLastWin32Error o alla funzione GetLastError Win32 equivalente e la chiamata immediatamente precedente non è una chiamata a un metodo platform invoke. |
|
CA1405: I tipi di base del tipo visibile a COM devono essere visibili a COM |
Un tipo visibile a COM deriva da un tipo non visibile a COM. |
CA1406: Evitare gli argomenti Int64 per i client Visual Basic 6 |
I client COM Visual Basic 6 non sono in grado di accedere a Integer a 64 bit. |
COM non supporta i metodi statici. |
|
I tipi che utilizzano un'interfaccia duale consentono l'associazione dei client a uno specifico layout di interfaccia.Eventuali modifiche apportate in una versione futura al layout del tipo o ai tipi base interromperanno l'associazione dei client COM all'interfaccia.Per impostazione predefinita, se l'attributo ClassInterfaceAttribute non è specificato, viene utilizzata un'interfaccia di solo invio. |
|
Un tipo di riferimento contrassegnato specificatamente come visibile a COM contiene un costruttore con parametri pubblico, ma non contiene un costruttore predefinito pubblico senza parametri.Un tipo senza un costruttore predefinito pubblico non può essere creato da client COM. |
|
Un tipo dichiara un metodo contrassegnato mediante l'attributo System.Runtime.InteropServices.ComRegisterFunctionAttribute ma non dichiara un metodo contrassegnato mediante l'attributo System.Runtime.InteropServices.ComUnregisterFunctionAttribute o viceversa. |
|
CA1411: I metodi di registrazione COM non devono essere visibili |
Un metodo contrassegnato utilizzando l'attributo System.Runtime.InteropServices.ComRegisterFunctionAttribute o System.Runtime.InteropServices.ComUnregisterFunctionAttribute è visibile esternamente. |
CA1412: Contrassegnare le interfacce ComSource come IDispatch |
Un tipo è contrassegnato utilizzando l'attributo System.Runtime.InteropServices.ComSourceInterfacesAttribute e almeno una delle interfacce specificate non è contrassegnata utilizzando l'attributo System.Runtime.InteropServices.InterfaceTypeAttribute impostato su ComInterfaceType.InterfaceIsIDispatch. |
CA1413: Evitare i campi non pubblici nei tipi valore visibili a COM |
I campi di istanza non pubblici di tipi di valori visibili a COM sono visibili ai client COM.Esaminare il contenuto dei campi alla ricerca di informazioni che non devono essere esposte o che avranno un impatto non previsto sulla progettazione o la sicurezza. |
CA1414: Contrassegnare gli argomenti P/Invoke booleani con MarshalAs |
Per il tipo di dati booleano sono disponibili più rappresentazioni nel codice non gestito. |
Questa regola ricerca le dichiarazioni del metodo di platform invoke per le funzioni Win32 con un puntatore a un parametro di struttura OVERLAPPED e il cui parametro gestito corrispondente non è un puntatore a una struttura System.Threading.NativeOverlapped. |