Matlab和.NET 4.0数据通信

5
我有一个在Matlab中实现的算法,打算将其部署为DLL以与.NET项目集成。 .NET项目是一个基于GUI的应用程序,其中一小部分包括显示运行算法得到的结果。 我目前遇到的问题是需要显示中间结果。该算法相当复杂,并运行多个迭代(由用户选择),每次迭代结束时,GUI应更新为当前数据。
我目前能想到的最好解决方案是让Matlab线程充当tcp客户端,连接到我在C# GUI应用程序中启动的本地tcp服务器。但是,我觉得这种方法效率低下。 我想知道是否还有其他方法可以实现这一点。
1个回答

5

首先,根据您的问题,我猜测您了解 Matlab builder NE。它允许您部署 .NET DLL。如果您不知道,请尝试一下。

关于您的选项:

1)您可以将一个 .NET 对象传递给您的 Matlab 代码作为通信手段。 创建该类的新实例,并将其发送到您的 Matlab 代码作为输入。Matlab 代码将在每个迭代中调用 UpdateGui 逻辑。以下示例是用 C# 编写的。

 class GuiUpdater{
      public void UpdateGui(int param1,int param2){
           //Do update logic here.
      }
 } 

2) 将您的DLL编译为COM (在Matlab Builder NE中也可以),并使用COM通信。
3) 使用文件系统作为通信手段。在Matlab中写入文件,在.NET中读取。


感谢您的回答。但是,使用解决方案1难道不意味着GuiUpdater必须能够看到整个GUI代码吗?这是否意味着整个C#项目都会被打包进DLL中? - filipcampeanu
@filipcampeanu,是的,GuiUpdater必须能够访问整个GUI。我不理解你的第二个问题,请解释一下。 - Andrey Rubshtein
抱歉,我表达不够清晰。这个解决方案看起来很好,但是我不能将其与我的项目集成。我在考虑用Matlab对象包装算法代码的替代方法,将其部署为DLL,在C#中实例化它,并从C#调用该对象上的方法。但我不确定是否可以这样做。例如,我尝试使用MWArray [] result = matlab.MyClass(1,input)实例化一个类,但在调用结束时,result仍然包含一个空元素(实际上应该是对实例化对象的引用)。我想知道这是否可行。 - filipcampeanu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接