Je référence à une structure COM qui commence comme suit:PInvoke - comment représenter un champ à partir d'une interface COM
[scriptable, uuid(ae9e84b5-3e2d-457e-8fcd-5bbd2a8b832e)]
interface nsICacheSession : nsISupports
{
/**
* Expired entries will be doomed or evicted if this attribute is set to
* true. If false, expired entries will be returned (useful for offline-
* mode and clients, such as HTTP, that can update the valid lifetime of
* cached content). This attribute defaults to true.
*/
attribute PRBool doomEntriesIfExpired;
...
J'ai trouvé le code pour importer cette interface dans mon application C#. Le code doit être mauvais si, comme la méthode set
ne semble pas être utile et jette aussi une erreur lorsque je tente de l'appeler juste pour voir ce qui se passe:
[Guid("ae9e84b5-3e2d-457e-8fcd-5bbd2a8b832e"), ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface nsICacheSession
{
[return: MarshalAs(UnmanagedType.Bool)]
void set_doomEntriesIfExpired();
[return: MarshalAs(UnmanagedType.Bool)]
bool get_doomEntriesIfExpired();
...
Quelle est la bonne façon de régler la valeur de doomEntriesIfExpired
et comment puis-je faire référence à partir de mon code?
EDIT
J'ai changé mon code pour ce qui suit, qui a produit "System.AccessViolationException: Tentative de lecture ou en écriture mémoire patata ...":
[Guid("ae9e84b5-3e2d-457e-8fcd-5bbd2a8b832e"), ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface nsICacheSession
{
void set_doomEntriesIfExpired(bool enabled);
bool get_doomEntriesIfExpired();
...
Nice, je ne savais pas que vous pouviez conserver les propriétés lors de l'utilisation interop. –