Создание общей библиотеки (сборка .NET) в Matlab и использование ее в C #

2

Я создал сборку .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 бит)

  • 1
    Может быть, это поможет скомпилировать вашу C # программу для x86.
  • 0
    Что ж! Ваша догадка была верна - установка компилятора с «Любого процессора» на «x64» исправила это
Показать ещё 1 комментарий
Теги:

2 ответа

3

На всякий случай кто-то другой столкнется с той же проблемой. Некоторое время назад у меня была эта проблема, поэтому я придумал полное решение этой проблемы.

Вам нужно установить параметры проекта для использования .Net Framework 4.0 (вместо 4.5 VS 2013 устанавливает как версию по умолчанию) и измените целевую платформу на x64. Этот набор прекрасно работает на Win 8.1 (x64), MatLab R2013a (x64, версия 8.1) и Visual Studio 2013.

1

ЕСЛИ вы опубликовали 64-битную dll-матрицу Matlab, измените настройки VS-проекта на любой процессор и снимите флажок свойства "Предпочитаете 32-бит"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню