在创建使用 .NET 集成和枚举封装数据的 DLL 时,我在 MATLAB R2010b 中遇到了问题。
例子:
- 在 MATLAB 中有一个 .NET 程序集,我们称之为“MyAssembly”(MyAssembly.dll)。
有 Matlab 枚举类“OpenMode”
此类使用 .NET 枚举:“MyAssembly.OpenMode”以通过 Matlab 枚举访问 .NET 枚举的方式(在我的情况下,强制类型转换是必需的):classdef OpenMode methods function obj = OpenMode(netType) obj.Net = netType; end end properties Net end enumeration ReadOnly (MyAssembly.OpenMode.ReadOnly) ReadWrite (MyAssembly.OpenMode.ReadWrite) end end
netElem = OpenMode.ReadOnly.Net; cls = class(netElem) cls = MyAssembly.OpenMode
应导出的 Matlab 函数:
function retVal = MyFunction(inputs) NET.addAssembly('MyAssembly.dll'); flag = OpenMode.ReadOnly; netFlag = flag.Net; % Some code... end
- 在 Matlab 中添加 .NET 程序集(检查)
NET.addAssembly('MyAssembly.dll')
- 尝试编译DLL:
...并得到错误:mcc -B csharedlib:MyLib MyFunction
Depfun error: 'Undefined variable "MyAssembly" or class "MyAssembly.OpenMode.ReadOnly".' ??? Error using ==> mcc Error executing mcc, return status = 1 (0x1).
mcc 编译器在代码枚举中没有检测到“MyAssembly”存在,但是这里有一个函数会编译成功:
function retVal = MyFunction(inputs)
netflag = MyAssembly.OpenMode.ReadOnly;
% Some code...
end
如果您在 MATLAB 中遇到过类似问题并找到了解决方案,请告诉我该怎么做。
谢谢!
问候,铁