我正在开发一个Simulink中的SFunction和编译后子模型,该SFunction调用使用Realtime Workshop编译的DLL。问题在于,一旦我编译了子模型一次,通过SFunction在本机Simulink中执行并完成模型后,MATLAB仍然保持着对子模型DLL的控制权。除非重新启动MATLAB,否则我无法重新编译DLL以释放其控制权。我已经试图使用ProcessExplorer来强制关闭句柄,但它无法做到这一点。
我认为,如果你只是将实际的DLL
重命名并重新编译,它应该可以工作。我知道这对于mex
文件有效。如果这不起作用,你可以尝试这个解决方案。
如何将S-Function绑定到DLL?如果您在链接时绑定,那么可以尝试在运行时进行动态绑定并在mdlTerminate
中显式释放句柄。这样,MATLAB甚至不会知道您访问了DLL。当然,这使得从S-Function内部与DLL的实际交互有些混乱。
clear functions
吗?它应该会清除内存中的所有 MEX 函数。 - am304