Il cast (int) MyObjectdovrebbe solo di lavoro.
Se ciò fornisce un'eccezione di cast non valida, probabilmente è perché il tipo di variante non è VT_I4. La mia scommessa è che una variante con VT_I4 viene convertita in un int inscatolato, VT_I2 in un boxed short, ecc.
Quando si esegue un cast su un valore di tipo boxed è valido solo per il cast nel tipo inserito. Esempio di esempio, se la variante restituita è in realtà un VT_I2 allora (int) (breve) myObject dovrebbe funzionare.
Il modo più semplice per scoprirlo è ispezionare l'oggetto restituito e dare un'occhiata al suo tipo nel debugger. Assicurarsi inoltre che nel assembly di interoperabilità si ha il valore di ritorno segnato con MarshalAs (UnmanagedType.Struct)
fonte
2009-04-13 20:13:21
Ho trovato un punto che non era proprio un errore, ma forse ha semplificato le cose troppo, quindi qualcuno potrebbe pensarlo. Ho rimosso quella frase e aggiunto un link alla documentazione autorevole. –
Il cast diretto funzionerà con una conversione implicita? Avevo l'impressione che ciò avvenga solo in modo unboxing, non in altre conversioni. –
Non esattamente una risposta, ma leggi questo: http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx –