我有.NET程序集文件,我需要它在MATLAB中工作。 (该库是用C#创建的,我有相应的源代码)
在documentation之后,我发现以下命令将在MATLAB中加载程序集并使其类可用于“在MATLAB中”。但它似乎没有起作用。我用它来加载文件:
color = NET.addAssembly('c:\path\to\file\EvolutionMapsClassLib.dll');
加载正常,我在工作区中看到1x1 .NET程序集对象。当我输入color
时,我得到以下结果:
color =
NET.Assembly handle
Package: NET
Properties for class NET.Assembly:
AssemblyHandle
Classes
Structures
Enums
GenericTypes
Interfaces
Delegates
显然它已正确加载,而且输入color.Classes
会给出以下内容:
>> color.Classes
ans =
'EvolutionMaps.EvolutionMap'
'EvolutionMaps.EvolutionMap+EstimationResults'
'EvolutionMaps.PrincipalDirectionEvolutionMap'
'EvolutionMaps.CharacterDimensionsEstemator'
'EvolutionMaps.MapBlob'
'EvolutionMaps.MapsMetric'
'EvolutionMaps.MapsMetric+MapMinimalComparable'
'EvolutionMaps.MapsL2Distance'
'EvolutionMaps.DiagonalEvolutionMap'
'EvolutionMaps.EvolutionMapGenerator'
'EvolutionMaps.HeightEvolutionMap'
'EvolutionMaps.FullnessEvolutionMap'
'EvolutionMaps.YvalEvolutionMap'
'EvolutionMaps.ImageExtractor'
'EvolutionMaps.HorisontalProjectionDistance'
'EvolutionMaps.StrokeWidthEvolutionMap'
'EvolutionMaps.ConnectedComponentsFinder'
'EvolutionMaps.ColorMap'
'EvolutionMaps.ColorMap+GrayColorMap'
'EvolutionMaps.ColorMap+JetColorMap'
'EvolutionMaps.TransitionAvgEvolutionMap'
'EvolutionMaps.PrincipalProjectionEvolutionMap'
'EvolutionMaps.ConnectedComponent'
'EvolutionMaps.WidthEvolutionMap'
这似乎运行良好,但根据在线帮助,为了与这些类进行交互,我需要知道方法和属性。
这是我遇到问题的地方,因为properties
和methods
似乎都不起作用。
我尝试了每个变体来获取属性或方法列表,但我不断收到此错误:
>> properties color.EvolutionMaps.ColorMap
No properties for class color.EvolutionMaps.ColorMap or no class color.EvolutionMaps.ColorMap.
>> properties color.Classes.EvolutionMaps.ColorMap
No properties for class color.Classes.EvolutionMaps.ColorMap or no class color.Classes.EvolutionMaps.ColorMap.
>> properties Classes.EvolutionMaps.ColorMap
No properties for class Classes.EvolutionMaps.ColorMap or no class Classes.EvolutionMaps.ColorMap.
methods
的情况也一样,我不断收到此错误:
>> methods color
No methods for class color or no class color.
当我打开此程序集的源代码时,它会显示从screenshot可以看到的所有方法和属性。
那么如何在不显示属性或方法的情况下使.NET程序集工作呢?
谢谢
答案 0 :(得分:5)
NET.addAssembly
函数加载.NET程序集并使其在MATLAB中可用。返回的变量实际上是一个"元对象"包含information关于包含在程序集中的类,枚举,结构等。
如果要处理库所公开的任何类,则必须像往常一样实例化对象(或者如果可用则直接调用静态函数)。 documentation很好地解释了这一点。
例如,请使用以下C#类:
using System;
namespace ClassLibraryTest
{
public class MyClass
{
public static double add(double x, double y)
{
return x + y;
}
public double negate(double x)
{
return -x;
}
}
}
首先我们将它编译成.NET程序集,我们在MATLAB中使用它:
> csc.exe /target:library /out:ClassLibraryTest.dll MyClass.cs
% load my assembly
info = NET.addAssembly( fullfile(pwd,'ClassLibraryTest.dll') );
% call static method
result = ClassLibraryTest.MyClass.add(1,2)
% instantiate instance of class and call member function
c = ClassLibraryTest.MyClass();
result = c.negate(1)
您现在可以照常检查类的属性和方法:
>> properties(c)
>> methods(c)
>> methodsview ClassLibraryTest.MyClass