我正在尝试使用用C编写的示例IPOPT问题并将其编译为在EXCEL VBA代码中使用的DLL。 我正在使用Cygwin在Windows中编译DLL。 (作为所有人的EXE,它按预期正常工作)。 从EXCEL,我可以毫无问题地访问DLL,并可以交换数据。 但是,只要DLL开始运行IPOPT函数,EXCEL就会以错误结束。 从我的调试活动中,这是由内存分配引起的。 如果DLL中的C代码尝试使用malloc分配内存,EXCEL将运行到ERRORS。 如果DLL中的C代码通过函数LocalAlloc(来自windows.h)分配内存,则一切正常。
现在,我显然需要将整个IPOPT代码中的malloc调用(也许是BLAS,LAPACK和求解器?)从malloc更改为 LocalAlloc。 这样做有没有痛苦的方法吗?有没有机会让包装器或任何方式让EXCEL接受由Cygwin创建的C-DLL的堆管理? 任何配置选项?
感谢您的帮助!