Я размещаю библиотеку .NET в моей программе на C ++, используя следующие методы, но это не полный список:
CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
GetIDsOfNames()
И, в конце концов, звонок на Invoke()
.
Это работает достаточно хорошо, но я теряю память всякий раз, когда функция .NET возвращает массив, например:
public int[] getArray() { int[] i = { 0, 1, 2, 3 }; return i; }
В этом случае функция возвращает VARIANT
типа VT_SAFEARRAY|VT_I4
. Я пробовал delete
и delete[]
как для дескриптора, так и для члена pvData, и это всегда не удается. Я попытался SafeArrayDestroy()
дескриптор, который успешно, но повреждает кучу. Я могу позвонить SafeArrayDestroyData()
на variant.parray->pvData
, который работает нормально, но SafeArrayDestroyDescriptor()
снова портит кучу. Я все еще пропускаю дескрипторы массива.
Итак, как мне освободить дескриптор SAFEARRAY и устранить эту утечку памяти?