Stu*_*PhD 7 .net c# matlab .net-assembly matlab-deployment
我有.NET程序集文件,我需要它在MATLAB中工作.(该库是用C#创建的,我有相应的源代码)
在文档之后,我发现以下命令将在MATLAB中加载程序集并使其类可用于"在MATLAB中".但它似乎没有起作用.我用它来加载文件:
color = NET.addAssembly('c:\path\to\file\EvolutionMapsClassLib.dll');
Run Code Online (Sandbox Code Playgroud)
加载很好,我在工作区中看到一个1x1 .NET程序集对象.当我输入时,color我得到以下结果:
color =
NET.Assembly handle
Package: NET
Properties for class NET.Assembly:
AssemblyHandle
Classes
Structures
Enums
GenericTypes
Interfaces
Delegates
Run Code Online (Sandbox Code Playgroud)
所以显然它已经正确加载,而且打字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'
Run Code Online (Sandbox Code Playgroud)
这似乎运作良好,但根据在线帮助,为了与这些类进行交互,我需要知道方法和属性.
这是我遇到问题的地方,既不是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.
Run Code Online (Sandbox Code Playgroud)
情况也是如此methods,我一直收到这个错误:
>> methods color
No methods for class color or no class color.
Run Code Online (Sandbox Code Playgroud)
当我打开此程序集的源代码时,它会显示所有方法和属性,如此屏幕截图所示.
那么如何在不显示属性或方法的情况下使.NET程序集工作呢?
谢谢
该NET.addAssembly函数加载.NET程序集并使其在MATLAB中可用.返回的变量实际上是"元对象"含有信息有关的类,枚举,结构等.包含在所述组件上.
如果要处理库所公开的任何类,则必须像往常一样实例化对象(或者如果可用则直接调用静态函数).该文档解释了这个非常好.
例如,请使用以下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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先我们将它编译成.NET程序集,我们在MATLAB中使用它:
> csc.exe /target:library /out:ClassLibraryTest.dll MyClass.cs
Run Code Online (Sandbox Code Playgroud)
% 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)
Run Code Online (Sandbox Code Playgroud)
您现在可以照常检查类的属性和方法:
>> properties(c)
>> methods(c)
>> methodsview ClassLibraryTest.MyClass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1753 次 |
| 最近记录: |