bonjour à tous,
bon voila, je sèche...
Après plusieurs jour de recherche et d'essai infructueux, j'ai besoin de vos lumières
Ce que je veux faire : une class exposée à COM qui permet, en outre, de sauvegarder son contenu dans un fichier xml (fonction .SaveAs) ou de recharger un objet déjà sauvagarder (fonction .LoadFromFile).
-> Côté sauvegarde : no problemo, la sérialisation saop fonctionne à merveille et j'ai un joli fichier xml avec les membres de la class.
-> Coté chargement :
- si j'appel la fonction .LoadFromFile depuis un projet .NET : no problemo, la déserialisation se passe normalement et mon objet se voit bien affecté toutes les valeurs necessaires
- si j'appel la fonction .LoadFromFile depuis l'exterieur (par exemple VBA), donc en utilisant l'exposition COM, la les choses se gatent puisque la déserialisation ne s'effectue pas, et j'ai une jolie exception

En retirant la gestion des exception, voici la parti principale du code :
1 2 3 4 5 6 7 8 9 10
| Dim myFileStream As FileStream
Dim deserializer As New SoapFormatter
Dim temp_obj As Object
Dim Temp_Foo As New Foo_Class
myFileStream = File.OpenRead(Full_File_Name)
myFileStream.Position = 0
temp_obj = deserializer.Deserialize(myFileStream)
Temp_Foo = DirectCast(temp_obj, Foo_Class)
myFileStream.Close() |
La ligne qui générère l'exception est :
temp_obj = deserializer.Deserialize(myFileStream)
C'est cette même ligne qui passe bien sur un projet .NET et pas sur un projet COM.
-> j'ai pensé à l'histoire du stream qui doit etre remis sur sa position initiale (position = 0), mais sans trop d'effet.
-> j'ai également lu qui peut etre il y a une histoire avec la securité sur des applications "non-trusted", j'ai donc rajouté dans mon fichier AssemblyInfo.vb l'attribut suivant, sans trop d'effet non plus
:
<Assembly: security.AllowPartiallyTrustedCallers()>
Dites, hein... vous avez un tuyaux pour moi ? 
Merci à tous (et toutes) pour vos futures post
Partager