我正在尝试使用用 C 编写并编译为 EXCEL VBA 代码中使用的 DLL 的示例 IPOPT 问题。我正在使用 Cygwin 在 Windows 中编译 DLL。(作为独立的 EXE,它可以正常工作)。从 EXCEL 中,我可以毫无问题地访问 DLL 并且可以交换数据。但是,一旦 DLL 开始运行 IPOPT 函数,EXCEL 就会关闭并出现错误。从我的调试活动来看,这是由内存分配造成的。如果 DLL 中的 C 代码尝试使用 malloc 分配内存,EXCEL 将遇到错误。如果 DLL 中的 C 代码通过函数 LocalAlloc(来自 windows.h)分配内存,则一切正常。
现在,我显然需要将整个 IPOPT 代码(可能还有 BLAS、LAPACK 和求解器?)中的 malloc 调用从 malloc 更改为 LocalAlloc。有没有一种无痛的方法来做到这一点?包装器或任何方式使 EXCEL 接受由 Cygwin 创建的 C-DLL 的堆管理的任何机会?任何配置选项?
感谢您的任何帮助!