MATLB Data API for .NETにて構造体のデータ型を送受信する方法

6 visualizaciones (últimos 30 días)
啓嗣
啓嗣 el 5 de En. de 2024
Comentada: 啓嗣 el 11 de En. de 2024
お疲れ様です。
MATLAB Compiler SDKを用いて、MATLAB関数をパッケージ化し、.NETアセンブリに統合したいと考えています。
その際、構造体のデータ型のやりとりを行いたいと考えています。
テストコードを作成してデータの送受信を行おうとしてみたところ失敗し、visual studio 2022側に以下のエラーが出ました。
Errorコード:CS1503 引数~は'out 構造体タグ名'から'out dynamic'へ変換することはできません。
そのため、構造体データ型のデータ送受信を行うチュートリアル等をご教授いただければと思います。

Respuesta aceptada

Kojiro Saito
Kojiro Saito el 9 de En. de 2024
こちらのドキュメントの末尾が参考になります。
For MATLAB types that do not have a corresponding C# type, such as struct or dictionary, the generated type is dynamic.
MATLABからのリターン値が構造体の場合は、dynamicデータ型で定義する必要があります。
また、MATLABデータAPIの場合の.NETとのデータのやり取りは扱うドキュメントは、「MATLAB 関数への .NET データ型の受け渡し」や「Use MATLAB Structures in .NET」にありますが、.NETの構造体をMATLABに直接入れることはできないため、MathWorks.MATLAB.Types.MATLABStructを使って.NET内でMATLABの構造体を定義する必要があります。
.NETからMATLABの構造体を引数に渡して関数を呼び出し、出力として構造体を受け取るC#のコード例は下記のとおりです。
Program.cs 抜粋
// % MATLABStructを使ってC#の中で構造体を作成
int[] myarr = new int[] { 1, 2, 3 };
MATLABStruct in1 = new MATLABStruct(("field1", myarr));
// % 出力として返ってくる構造体をdynamicで受け取る
dynamic out1;
MATLABFunctions.testStruct(matlab, in1, out out1);
// % 構造体のフィールド(field1)を取得
int[] fieldlValue = out1.GetField("field1");
// % 画面に出力 (1 2 3 が出力される)
Array.ForEach(fieldlValue, Console.WriteLine);
構造体を入出力にするMATLAB関数のサンプル (testStruct.m)
function out = testStruct(str)
if isstruct(str)
out = str;
end
end
  3 comentarios
Kojiro Saito
Kojiro Saito el 11 de En. de 2024
argumentsに実数の{mustBeReal}を指定することで、自動生成されるstrongly_typed_interfaceフォルダー内のtestStruct.csがSystem.Numerics.Complexからdoubleになります。サイズを指定しないとdynamicになってしまうため、(1,1)などで配列を指定しておく必要があります。
testStruct.m
function [out1,out2]= testStruct(str,num)
arguments(Input)
str struct
num (1,1) double {mustBeReal}
end
arguments(Output)
out1 struct
out2 (1,1) double {mustBeReal}
end
if isstruct(str)
out1 = str;
end
out2 = num;
end
啓嗣
啓嗣 el 11 de En. de 2024
無事解決できました。早急な回答ありがとうございました。

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Deploy to .NET Applications Using MATLAB Data API for .NET en Help Center y File Exchange.

Productos


Versión

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!