Устранение различий в управлении кучами в EXCEL и CYGWIN-DLL

Я пытаюсь использовать пример проблемы IPOPT, написанной на C и скомпилированной как DLL, которая используется в коде EXCEL VBA. Я использую Cygwin для компиляции DLL в Windows. (Как и все EXE-файлы, он работает правильно, как и ожидалось). Из EXCEL я могу без проблем обращаться к DLL и обмениваться данными. Однако, как только DLL начинает выполнять функции IPOPT, EXCEL закрывается с ошибками. Из моих действий по отладке это происходит из-за выделения памяти. Если код C в DLL пытается выделить память с помощью malloc, EXCEL приведет к ошибкам. Если код C в DLL выделяет память через функции LocalAlloc (из windows.h), все работает правильно.

Теперь мне, очевидно, нужно изменить вызовы malloc во всем коде IPOPT (и, возможно, BLAS, LAPACK и решатели?) С malloc на LocalAlloc. Есть ли безболезненный способ сделать это? Есть ли какой-нибудь шанс для обёртки или какого-либо способа заставить EXCEL принять управление кучей C-DLL, созданной Cygwin? Любые варианты конфигурации?

Спасибо за любую помощь!

0 ответов

Другие вопросы по тегам