Я пытаюсь использовать DLL-библиотеку Visual Studio 2008 с пакетом обновления 1 (SP1) (с поддержкой поддержки общего языка) в Codeblocks (которая использует GCC под mingw). Некоторые из аргументов, передаваемых в dll, динамически распределяются вызывающей функцией. Мой вопрос:
"Могут ли аргументы, передаваемые в dll, находиться в куче вызывающей функции. Безопасно ли это делать?"
При возврате из dll стек вызывающей функции поврежден, и при попытке доступа к ним я получаю SIGTRAP в кодовых блоках, когда пытаюсь отладить эту проблему.
В чем может быть причина этого?
Прототип функции dll выглядит так:
int __cdecl myTesseractOCR(myOCRData* labels_for_ocr);
Определение myOCRDaata показано ниже:
typedef struct __ocr_data
{
char* arr_image [NUMOBJ_LIMIT_HIGH];
int start_x [NUMOBJ_LIMIT_HIGH];
int start_y [NUMOBJ_LIMIT_HIGH];
int width [NUMOBJ_LIMIT_HIGH];
int height [NUMOBJ_LIMIT_HIGH];
int widthstep [NUMOBJ_LIMIT_HIGH];
char number_plate_buff [2*NUMOBJ_LIMIT_HIGH];
int ocr_label_count;
} myOCRData;
arr_image указывает на данные, которые находятся в куче вызывающей функции, где все остальные члены вышеуказанной структуры находятся в стеке вызывающей функции. Все эти члены, находящиеся в стеке, повреждаются, и программа генерирует SIGTRAP. Я видел, как такие проблемы обсуждались в различных потоках в стеке потока, но пока не нашел конкретного решения.