在 Matlab 中创建共享库 (.NET Assembly) 并在 C# 中使用它

本文关键字:并在 Assembly NET 创建 Matlab 共享 | 更新日期: 2023-09-27 18:30:18

我已经使用应用程序编译器在Matlab(2014a)中创建了一个.NET程序集,我正在尝试在C#下使用它。

matlab 模块只有 1 个功能:

function [ val ] = AnalyzePicture( arg1 )
val = 5;
end

导出的 .NET DLL 名为 AnalyzePicture.dll并导出 Class1(在 Matlab 应用程序编译器中定义)。但是,当我尝试初始化它时,我收到一个异常,说:

The type initializer for 'MathWorks.MATLAB.NET.Arrays.MWArray' threw an exception

除了内心的例外说:

An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

这是代码

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AnalyzePicture;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
namespace Analyzer
{
    public class MatlabWrapper
    {
        AnalyzePicture.Class1 analyzer = null;
        public MatlabWrapper()
        {
            try
            {
               // The exception is raised here
                analyzer = new AnalyzePicture.Class1();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("f");
            }
        }
        ...

我的项目引用了MWArray(8.3,当前版本)和AnalyzePicture dll(和DirectShowLib-2010)。

我试图在网上找到解决方案,但我找不到一个关于如何在 C# 中正确使用 Matlab .NET 程序集的像样的例子。我完全按照本文中所述进行操作,此外我的程序集不是以com.开头

关于可能导致问题的原因的任何想法?任何代码示例都将得到极大的赞赏

(我使用的是Windows 7 64位,Matlab 2014a 8.3 64位)

在 Matlab 中创建共享库 (.NET Assembly) 并在 C# 中使用它

以防

其他人遇到同样的问题。我前段时间遇到了这个问题,所以我想出了完整的解决方案。

您需要将项目设置设置为使用 .Net Framework 4.0(而不是将 4.5 VS 2013 集设置为默认版本),并将目标平台更改为 x64。这套套装在 Win 8.1 (x64)、MatLab R2013a(x64,运行时版本 8.1)和 Visual Studio 2013 上运行良好。

如果您发布了 matlab 64 位 dll,请将您的 VS 项目构建设置更改为任何 CPU 并取消选中"首选 32 位"属性