Les acteurs (int) myobject
debe ne font que fonctionner.
Si vous obtenez une exception de cast invalide, c'est probablement parce que le type de variante n'est pas VT_I4. Je parie qu'une variante avec VT_I4 est convertie en un int boxé, VT_I2 en un short boxé, etc.
Lorsqu'on effectue un cast sur un type de valeur encadré, il n'est valable que pour le type encadré. Par exemple, si la variante retournée est en fait un VT_I2, alors (int) (short) myObject
devrait fonctionner.
La façon la plus simple de le savoir est d'inspecter l'objet retourné et de regarder son type dans le débogueur. Assurez-vous également que dans l'assemblage interopérable, la valeur de retour est marquée par l'attribut MarshalAs(UnmanagedType.Struct)