私はMATLAB処理ルーチンを呼び出す必要があるC#プログラムを書いています。私はMATLABのCOMインターフェイスを見てきました。残念ながら、COMインターフェイスは、交換できるデータの種類に関してかなり制限されているようです。行列と文字配列はサポートされていますが、COMインターフェイスを使用してC#とMATLABの間で構造体データまたはセル配列を交換することはサポートされていないようです。たとえば、次のコード(IM000000という名前のDICOMイメージが適切なファイルフォルダーに存在すると仮定)では、MATLAB変数「img」と「header」はそれぞれ256x256のint16行列と構造体です。GetWorkspaceData呼び出しは、「img」では正常に機能しますが、「header」は構造体であるため、「header」ではnullを返します。
public class MatlabDataBridge
{
MLApp.MLAppClass matlab;
public MatlabDataBridge()
{
matlab = new MLApp.MLAppClass();
}
public void ExchangeData()
{
matlab.Execute(@"cd 'F:\Research Data\'");
matlab.Execute(@"img = dicomread('IM000000');");
matlab.Execute(@"header = dicominfo('IM000000');");
matlab.GetWorkspaceData(@"img", "base", out theImg); // correctly returns a 2D array
matlab.GetWorkspaceData(@"header", "base", out theHeader); // fails, theHeader is still null
}
}
COMインターフェイスを使用してMATLABとの間で構造体データをマーシャリングするための適切な回避策はありますか?そうでない場合、この機能はMATLAB Builder NEアドオンによって十分にサポートされていますか?