8

我在 C# 中感觉很自在,我将设计一个控制台应用程序,该应用程序将从 Web 服务中获取一些数据。我想让一群科学家使用 MatLab 中的数据。实现此目的的一种方法是将其存储在 HDD 上的文件中,然后将其内容加载到 MatLab 中。

不过,这让我开始思考。是否可以在 MatLab 中创建一个函数来调用在 C# 中创建的 EXE,以便我的科学朋友可以去:

a = GetMeSomeData()

并用服务的响应填充变量a ?(当然,我会使用我的 C# 代码格式化数据,使其适合 MatLab 的矩阵模型。)

在我开始研究这个之前,我已经做了一些谷歌搜索,但我发现的大部分内容都是关于旧版本的 MatLab (2007),它提到了关于创建 COM 对象的内容。

4

3 回答 3

5

您可能想看看这个:在 MATLAB 中使用 .NET 库

那里有很多文档。

从 开始,然后您似乎可以像在 .NET 中一样正常使用这些类。NET.addAssembly('path-to-dll)

您可能还想看看Using Arrays with .NET Applications

于 2013-01-23T21:43:07.283 回答
3

您可以轻松地调用 .NET 程序集中的函数。首先你必须告诉 Matlab 你将使用什么程序集:

NET.addAssembly("path//to//assembly.dll");

之后,您只需调用 m 文件中的函数:

foo = Namespace.Class.FunctionFoo(input1, input2);
bar = Namespace.Class.FunctionBar(input1, input2);

你甚至可以有多个输出。AC# 函数如下:

public void MultipleOut(int in1, int in2, out int out1, out int out2)
{ ... }

在 Matlab 中可以这样调用:

[out1, out2] = Namespace.Class.MultipleOut(in1, in2);
于 2013-01-23T21:45:24.727 回答
2

要直接回答问题,您可以使用system命令或!在 MATLAB 中执行外部进程。一旦它返回,您就可以读取和解析 MATLAB 函数的输出。将所有内容包装在一个 MATLAB .m 文件中,您就拥有了您在问题中描述的内容。

当然,您可以直接从 MATLAB 使用createClassFromWsdl. 正如其他人指出的那样,它NET.addAssembly允许您直接从 MATLAB 导入和使用 .net 程序集,这可能比解析文本文件输出更干净。

于 2013-01-23T21:42:39.960 回答