Pregunta

Estoy alojando una biblioteca .NET en mi programa C ++ utilizando los siguientes métodos, aunque no una lista exhaustiva:

CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
GetIDsOfNames()

Y eventualmente una llamada a Invoke().

Esto funciona lo suficientemente bien, pero estoy filtrando memoria cada vez que una función .NET devuelve una matriz, como:

public int[] getArray() { int[] i = { 0, 1, 2, 3 }; return i; }

En este caso, la función devuelve un VARIANT de tipo VT_SAFEARRAY|VT_I4. He intentado delete y delete[] tanto en el descriptor como en el miembro de PVData, y esto siempre falla. He intentado SafeArrayDestroy() El descriptor, que tiene éxito pero corrompe el montón. puedo llamar SafeArrayDestroyData() en variant.parray->pvData que funciona bien, pero SafeArrayDestroyDescriptor() nuevamente corrompe el montón. Todavía estoy filtrando los descriptores de la matriz.

Entonces, ¿cómo puedo repartir el descriptor Safearray y enchufar esta fuga de memoria?

¿Fue útil?

Solución

Imposible de adivinar sin ver código. El montón podría haberse corrompido mucho antes de todos modos.

Debe usar VariantClear ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top