【发布时间】:2013-12-18 15:17:37
【问题描述】:
我正在开发一个 SFunction 并在 Simulink 中编译子模型,这是一个调用使用 Realtime Workshop 编译的 DLL 的 SFunction。问题是,一旦我编译了一次子模型,通过 SFunction 在本机 Simulink 中执行它并且模型完成,MATLAB 仍然保留子模型 DLL 的句柄。在 MATLAB 重新启动之前,我无法重新编译 DLL,从而强制释放 DLL。
我什至去看看 ProcessExplorer 是否可以强制关闭句柄,但它不能。
【问题讨论】:
-
你试过关闭模型吗?这有什么不同吗?另外,您在关闭模型后尝试过
clear functions吗?它应该从内存中清除所有 MEX 函数。 -
已尝试:(1) 清除
,(2) 清除 mex,(3) 清除所有,(4) bdclose all,(5) unloadlibrary( ),(6)关闭模型,(7)关闭所有模型; (8) 使用 SysInternals ProcessExplorer 关闭句柄; (9) 使用 Unlocker 解锁/删除 DLL 和 (10) 在 SFunction 结束时调用 FreeLibrary()。这些似乎都不会影响问题。 -
:-( 比我尝试过的要多...抱歉,没有其他想法。
-
islibloaded('LIBNAME')返回什么? -
你如何加载/调用你的dll?你在你的 mdlTerminate 函数中完成后卸载它吗?