我正在使用我之前创建的.net DLL作为串行设备(可编程MCU)和MATLAB之间的接口: 示例操作: 1. MATLAB通过DLL向串口发送'开放端口'请求, 2.端口在DLL中打开,MATLAB无法控制端口(只有DLL有), 3. MATLAB向DLL发送其他请求(如读,写等...),并相应地做出响应 4. MATLAB通过DLL向串口发送'关闭端口'请求, 5.端口已关闭但仍由DLL占用。
问题是因为DLL在MATLAB中并且无法卸载(MATLAB,如MATHWORKS网站所述,不支持卸载已加载的.net DLL)并且MATLAB无法直接控制端口,端口在MATLAB关闭且DLL被卸载之前不可用(仅在MATLAB关闭时才会发生)。这意味着用户需要关闭几次MATLAB ......
那么,他们是否有任何解决方法来卸载DLL?或任何其他解决方案?
P.S,MATLAB有一些串行功能,但它们的性能非常有限(例如数据采集),因此无法使用它们(同样,DAQ-Toolbox也不错,但成本很高)。
答案 0 :(得分:1)
端口已关闭但仍然被DLL 占用,这是实际问题,应该可以解决:.Net串口api不允许的根本不可能你要正确关闭一个端口。所有System.IO.Ports.SerialPort类都有Close method之后应该完全关闭端口。
无论如何,可能的解决方案包括:
actxserver
,它具有卸载功能loadlibrary
/ unloadlibrary
DllImport
来使用可以直接处理串口的windows api函数(CreateFile等等);那么,这可能就是.Net SerialPort类内部做的......