c# - 如何在没有 MCR/MATLAB 的情况下在 C# 中使用 MATLAB 编译的 DLL?

标签 c# matlab dll pinvoke matlab-deployment

如果这个问题已经被问过,我很抱歉,但我找不到我一直在寻找的东西。我想知道是否有一种方法可以在 C# 中使用 MATLAB 编译的 c 共享库而不使用 MCR/MATLAB(或通常任何其他安装),例如要使用这个简单的函数 test.m,请通过 mcc 将其编译为 .dll,然后在 C# 中使用它:

[x,y,z]=test(a,b,c)
%x,a are integers
%y,z,b are matrices
%c is a string (which e.g. could be used to switch between several modes)


x=a*a;
y=b*b-b;
z=y*y;

我不完全确定这样做是否可能(更不用说容易了),但即使使用这个简单的示例我也无法在 C# 中使用它,尽管这也可能与我非常有限的 C# 有关经验。我想在这个例子中我将不得不使用 IntPtr 来处理矩阵,比如:

[DllImport("test.dll",EntryPoint="mlfTest")]
public static extern void testfunction([In] numargout, ref IntPtr x, ref IntPtr y, ref IntPtr z, [In] IntPtr a, [In] ref double[,] b, [In] ref c)

然后尝试通过与 Marshal 一起工作来从 x,y,z 中获取数据?我想我也犯了一些相当明显的错误,例如我不确定我是否可以将 ref double[,] 传递给 dll 并期望它工作。

我想如果绝对必要的话,我可以使用 MCR(这会使事情变得容易得多),但现在我受限了。

预先感谢您的帮助。

最佳答案

不幸的是,你所要求的是不可能的。 MATLAB 编译器生成的任何内容都需要系统上安装的 MATLAB 运行时。作为 MATLAB 安装本身的一部分,或单独安装。为什么?因为代码生成了对这些库的调用。

您知道您可以免费分发 MCR 安装程序,没有任何版税问题,对吧?

现在,另一方面,如果您真的想摆脱 MATLAB,那么您需要查看 MATLAB Coder .它是 MATLAB 中唯一可以让您创建真正的独立代码的组件(据我所知)。坏消息是它只输出到 C/C++。

关于c# - 如何在没有 MCR/MATLAB 的情况下在 C# 中使用 MATLAB 编译的 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11428925/

相关文章:

c# - 在 Autohotkey 中调用自定义 C#/.Net DLL

c# - Web API - 从模型返回一些字段

c# - 在根部构建带参数的依赖链

matlab - 在 MATLAB 环境中直接从桌面(快捷方式)打开 GUI

c++ - 在 C++ dll 中保持 MATLAB 引擎打开

c++ - 使用 CoCreateInstance 从 C++ 调用 COMVisible VB.Net dll

c++ - 如何在动态链接库中处理 'extern' 变量?

c# - Async-await 关键字查询

c# - 在 C# 中编写 List<> 的前 3 个字母

python - 使用 python 读取大型文本文件比使用 Matlab 读取相同文本的相同代码慢得多,知道为什么吗?