在创建使用.NET集成的DLL和封装数据的枚举时,我在MATLAB R2010b中遇到了问题。
示例:
有Matlab枚举类“OpenMode”
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
该类使用.NET枚举:“MyAssembly.OpenMode”
以这种方式通过Matlab枚举访问.NET枚举(在我的情况下,对于强制转换类型是必要的):
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
NET.addAssembly('MyAssembly.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中遇到类似问题并找到解决方案,请告诉我该怎么做。
谢谢!
此致 iroln
答案 0 :(得分:2)
我似乎找到了解决这些问题的方法。它不是很优雅,但它有效。
mcc编译器具有“ -a filename ”选项。此选项使您可以为CTF存档添加指定的文件。您希望使用.NET程序集添加定义枚举的所有文件:
我的案例:
mcc -B csharedlib:MyLib MyFunction -a OpenMode
......或者一般来说:
mcc -B csharedlib:MyLib MyFunction -a projectdir/*.m
我已使用构建脚本自动执行此操作。 到目前为止,这是唯一有效的解决方案。