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

时间:2014-11-13 13:59:46

标签: c# .net matlab

我使用Application Compiler在Matlab(2014a)中创建了一个.NET程序集,我试图在C#下使用它。

matlab模块只有一个功能:

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程序集的好例子。完全按照this文章中的描述完成,除了我的程序集不以com.

开头

关于可能导致问题的任何想法? 任何代码示例都会非常适合

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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