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

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

matlab模块只有1个function:

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

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

 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.开头之外,我完全按照本文所述做了com.

关于什么可能导致问题的任何想法? 任何代码示例都会受到极大的关注

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

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

您需要将项目设置设置为使用.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位”属性