Répondre à ma propre question. Lorsque vous renvoyez un IStream à partir de votre propre serveur COM, la DLL d'interopérabilité .NET place un IStream dans son interface. Par exemple, disons que la bibliothèque de type est MyComServer, alors l'interop accueillera une classe MyComServer.Interop.IStream.
Cette classe IStream possède des fonctions telles que RemoteRead, RemoteWrite, etc. Elles prennent un octet de référence comme premier paramètre. Utilisation de ceux-ci a bien fonctionné sur 32 bits à 32 bits, mais cette référence devient probablement un pointeur et ainsi de suite 64 à 32 quelque chose a mal tourné.
La solution consiste à convertir le fichier MyComServer.Interop.IStream en System.Runtime.InteropServices.ComTypes.IStream en utilisant "as" (ou juste cast probablement). Cela prend alors un octet plus familier [], int count et IntPtr pour la taille de retour.
Le IntPtr est ennuyeux car il pourrait être un hors int, mais j'utilisé (en tapant ceci dans la main afin de ne pas compilateur vérifié ..)
byte[] buffer = new byte[100];
IntPtr ptr = Marshall.AllocHGlobal(sizeof(int));
stream.Read(buffer, 100, ptr);
Malheureusement, nous sommes sur .NET 2.0 (encore parfois des clients n'aime toujours pas avoir à installer 3.5 - quand Windows 7 sera le plus utilisé, les gens ne l'installeront pas. – MrPurpleStreak