Я создал dll, используя swig из LibrDWG . Когда я пытаюсь вызвать одну из функций:
var layers= LibreDWG.dwg_get_layers(dwg_Data);
, я получил исключение нарушения памяти:
Exception thrown at 0x00000000622A995F (LibreDWG.dll) in LibreDWG_WPF.exe: 0xC0000005: Access violation reading location 0x0000000000000030.
Ошибка возникает только для больших файлов, меньшие работают нормально. Код оболочки, сгенерированный swig:
public static SWIGTYPE_p_p__dwg_object_LAYER dwg_get_layers(Dwg_Data dwg) {
global::System.IntPtr cPtr = LibreDWGPINVOKE.dwg_get_layers(Dwg_Data.getCPtr(dwg));
SWIGTYPE_p_p__dwg_object_LAYER ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_p__dwg_object_LAYER(cPtr, false);
return ret;
}
И код c:
EXPORT Dwg_Object_LAYER **
dwg_get_layers (const Dwg_Data *dwg)
{
unsigned int i;
unsigned int num_layers = dwg_get_layer_count (dwg);
Dwg_Object_LAYER **layers;
assert (dwg);
layers
= (Dwg_Object_LAYER **)calloc (num_layers, sizeof (Dwg_Object_LAYER *));
for (i = 0; i < num_layers; i++)
layers[i] = dwg->layer_control.entries[i]->obj->tio.object->tio.LAYER;
return layers;
}
Есть ли у вас предложения? Спасибо за любую помощь.