Если он ожидает байты, вы можете прочитать MemoryStream в байтовый массив и затем передать указатель на метод.
Вы должны объявить внешний метод:
[DllImport("mylibrary.dll", CharSet = CharSet.Auto)]
public static extern bool doSomething(IntPtr rawData, int dataLength);
Затем считайте байты из MemoryStream в байтовый массив. Выделите GCHandle , который:
После выделения вы можете использовать GCHandle
предотвратить управляемый объект от
собирать мусор
Коллектор, когда неуправляемый клиент
содержит единственную ссылку. Без таких
ручка, предмет можно собрать
сборщиком мусора перед
завершение своей работы от имени
неуправляемый клиент.
И, наконец, используйте метод AddrOfPinnedObject, чтобы получить IntPtr для передачи в C ++ dll.
private void CallTheMethod(MemoryStream memStream)
{
byte[] rawData = new byte[memStream.Length];
memStream.Read(rawData, 0, memStream.Length);
GCHandle rawDataHandle = GCHandle.Alloc(rawData, GCHandleType.Pinned);
IntPtr address = handle.AddrOfPinnedObject ();
doSomething(address, rawData.Length);
rawDataHandle.Free();
}