我使用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位)
答案 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位”属性