Сторонний com-модуль, используемый из c # через интерфейс, сгенерированный взаимодействием, вызывает утечку памяти
Сторонняя сигнатура метода c ++:
somemethod(....., long** param3, long** param4)
Сгенерированный метод взаимодействия:
somemethod(...., IntPtr param3, IntPtr param4)
Последние 2 параметра присваиваются массивами неуправляемой dll и освобождаются от c # Marshal.CoMemFree (не помню точный sig atm)
Используя тот же метод из C ++ через интерфейс com иосвобождение таким же образом не приводит к утечкам
Использование tlbimp из командной строки приводит к:
TlbImp : warning TI0000 : At least one of the arguments for
'Sometype.somemethod' cannot be marshaled by the runtime
marshaler. Such arguments will therefore be passed as a pointer and may
require unsafe code to manipulate.
Я нахожу удивительным, что длинные ** параметры не могут быть автоматически собраны.
Лучше понимать c ++ (кроме черной магии Com), чем .net, но реализовывать сторону .net ...
Как правильно получить доступ и освободить память, переданную обратно в param3 иparam4.Я подозреваю, что они должны быть вне IntPtr?