MATLAB Compiler API for .NETでデータの受け渡しを行う場合、多次元配列フィールド値をコマンドライン上で確認する方法
1 view (last 30 days)
Show older comments
お疲れ様です。
MATLAB Compiler SDKを用いて、MATLAB関数をパッケージ化し、.NETアセンブリに統合したいと考えています。
構造体のデータ型でデータをやり取りしようとした際、MATLABから出力された構造体の内、一つのフィールド値について、GetFieldを用いて値を取得しようとすると以下のエラーが出現します。
エラー内容:
System.InvalidOperationException
HResult=0x80131509
Message=Accessing properties and methods not supported for MATLAB struct.
Source=MathWorks.MATLAB.Types
スタック トレース:
場所 MathWorks.MATLAB.Types.MATLABArray.TryInvokeMember(InvokeMemberBinder binder, Object[] args,
Object& result)
場所 System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
場所 namespace名.Program.Main(String[] args) (C:\Users\...\Program.cs):行 105
.NET側で構造体を定義し、MATLAB側で構造体のフィールド値に関する値を計算します。
その後、MATLAB側から更新された構造体を.NET側に返します。この際、.NET側は更新された構造体のフィールドの値を確認したいと考えています。
Program.cs:
class Program
{
private static Double[,] X = new Double[,] {};
private static Double[,] Y = new Double[,] {};
private static MATLABStruct mystr = new MATLABStruct(("X",X),("Y",Y));
static void Main(string[] args)
{
︙
// % 出力定義
dynamic mystr_out
MATLABFunctions.example(matlab, mystr, out mystr_out)
Double[,] field_fp = mystr_out.GetField("fp"); // % 例外発生個所
︙
mystr = mystr_out;
}
}
問題を解決するため、お力添えいただければ幸いです。
5 Comments
Kojiro Saito
on 16 Jan 2024
出力のデータ型をMATLABArrayからMATLABStructに変更したら例外処理が起こらなくなったということは、 配列に対して構造体のメソッド(GetField)を行おうとしていたのかなと考えられます。
Answers (0)
See Also
Categories
Find more on MATLAB での .NET メソッド in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!