【问题标题】:Matlab and .NET 4.0 data communicationMatlab 和 .NET 4.0 数据通信
【发布时间】:2012-01-11 02:27:18
【问题描述】:

我在 Matlab 中实现了一个算法,我计划将其部署为 DLL,以便与 .NET 项目集成。 .NET 项目是一个基于 GUI 的应用程序,其中一小部分包括显示从运行算法获得的结果。我目前遇到的问题是我需要显示中间结果。该算法非常复杂,需要运行多次迭代(由用户选择),并且在每次迭代结束时,应使用当前数据更新 GUI。

目前我想到的最佳解决方案是让 Matlab 线程充当本地 tcp 服务器的 tcp 客户端,我将在我的 C# GUI 应用程序中启动它。但是,我觉得这种方法效率低下。我想知道这是否可以通过其他方式实现。

【问题讨论】:

    标签: c# .net matlab inter-process-communicat


    【解决方案1】:

    首先,从你的问题来看,我猜你知道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,是的,GuiUpdater 必须有权访问整个 GUI。我不明白你的第二个问题,请解释一下。
    • 抱歉,我弄糊涂了。该解决方案看起来不错,但我无法将它与我的项目集成。我正在考虑将 Matlab 对象包装在算法代码周围,将其部署为 DLL,在 C# 中实例化它并从 C# 调用该对象上的方法的替代方案。我不确定,但是可以做到这一点。例如,我尝试使用 MWArray[] result = matlab.MyClass(1, input) 实例化一个类,但在调用结束时结果包含一个空元素(实际上应该是对实例化对象的引用) .我想知道这是否可能。
    猜你喜欢
    • 2011-06-19
    • 2011-07-19
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2011-04-04
    • 2014-12-23
    相关资源
    最近更新 更多