Я создал сборку .NET в Matlab (2014a) с помощью Application Compiler, и я пытаюсь использовать ее под С#.
Модуль 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, текущая версия) и dll AnalyzePicture (и DirectShowLib-2010).
Я пытался найти решения в Интернете, но я не смог найти достойный пример того, как правильно использовать Matlab.NET Assembly в С#. Я сделал точно так, как описано в этой статье, кроме того, что моя сборка не начинается с com.
Любые идеи о том, что может вызвать проблему? Любые примеры кода будут значительно оценены
(Я использую Windows 7 64bit, с 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.
ЕСЛИ вы опубликовали 64-битную dll-матрицу Matlab, измените настройки VS-проекта на любой процессор и снимите флажок свойства "Предпочитаете 32-бит"