Condividi tramite


Avviso del compilatore (livello 1) C4462

impossibile determinare il GUID del tipo. Il programma potrebbe bloccarsi in fase di esecuzione.

L'avviso C4462 viene generato in un componente o app di Windows Runtime quando un elemento TypedEventHandler pubblico presenta come uno dei relativi parametri di tipo un riferimento alla classe contenitore.

Questo avviso viene alzato di livello automaticamente a un errore. Se si desidera modificare questo comportamento, usare #pragma avviso. Ad esempio, per impostare C4462 in un problema di avviso di livello 4, aggiungere questa riga al file di codice sorgente:

#pragma warning(4:4462)

Esempio

Questo esempio genera l'avviso C4462:

namespace N
{
    public ref struct EventArgs sealed {};
    public ref struct R sealed
    {
        R() {}
        event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;
    };
}

[Platform::MTAThread]
int main()
{
    auto x = ref new N::R();
}

Esistono due modi per risolvere l'errore. In primo luogo, come mostrato nell'esempio seguente, è possibile dare all'evento accessibilità interna in modo che risulti disponibile al codice nello stesso eseguibile, ma non al codice in altri componenti di Windows Runtime.

internal:
    event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;

Se l'evento deve essere pubblico, è possibile ricorrere a un'altra soluzione, ovvero esporlo attraverso un'interfaccia predefinita:

ref struct R;
public interface struct IR{ event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;};

public ref struct R sealed : [Windows::Foundation::Metadata::Default] IR
{
    R() {}
    virtual event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;
};

Un GUID del tipo Windows::Foundation::TypedEventHandler<R^, EventArgs^>^ viene utilizzato solo quando il tipo è accessibile da un altro componente. La prima soluzione funziona perché è accessibile solo dall'interno del proprio componente dopo l'applicazione della soluzione. In caso contrario, il compilatore suppone il caso peggiore e genera l'avviso.