используя DLL в Matlab - PullRequest
       43

используя DLL в Matlab

1 голос
/ 17 февраля 2010

У меня проблема с использованием DLL Fortran в Matlab. Я не мог использовать DLL, которая построена Фортраном, в Matlab. Я использую инструкцию «loadlibrary» в Matlab, но ошибка связана с заголовочными файлами. что такое заголовочные файлы ?? пожалуйста, дайте мне больше информации, чтобы загрузить dll fortran в matlab и вызвать его.

Ответы [ 3 ]

4 голосов
/ 17 февраля 2010

Вместо того, чтобы пытаться использовать DLL-файл напрямую, я предлагаю вам пересобрать его, используя функциональность Matlab MEX. Да, mex-файл - это dll, и вы можете создавать dll вне Matlab и успешно использовать их, гораздо проще для начинающего, такого как я полагаю, использовать MEX. Один из способов сделать это проще - если вы создаете мекс-файл, система не будет запрашивать у вас заголовочный файл, который, как вы знаете, довольно чужой для программиста на Фортране. Еще один способ, с помощью которого MEX облегчит вашу жизнь, заключается в том, что вы можете затем вызывать функцию, предоставляемую dll, непосредственно из командной строки Matlab, без loadlibrary.

Изучите документацию Matlab по файлам MEX, обратите особое внимание на то, как интегрировать Fortran таким образом.

1 голос
/ 18 октября 2011

Вам необходимо предоставить файл заголовка, который определяет каждую из названных функций в DLL-библиотеке Fortran, которую вы будете вызывать. Например, если ваша DLL содержит функцию с именем sum, которая суммирует две переменные двойной точности, например:

function sum(a,b) result(sum)
  real(kind=2), intent(in) :: a, b
  real(kind=2) :: sum
  sum = a + b
end function

Тогда ваш заголовок должен будет содержать что-то вроде:

double sum(double*a, double*b);

Но не забудьте украсить это именем, определенным для вашего компилятора Фортрана. Например, если sum был в модуле с именем foo, и вы скомпилировали с помощью gfortran, то вам понадобится что-то вроде:

double __foo_MOD_sum(double*a, double*b);

Есть много других случаев, но в этом суть.

1 голос
/ 17 февраля 2010

Не видя ваш заголовочный файл и командную строку, которую вы используете в MATLAB, вам здесь слишком сложно помочь. Вы можете ссылаться на документацию в MATLAB, в которой запрашивается передача двух аргументов в loadlibrary , вторым является файл заголовка с сигнатурами функций. Я предполагаю, что вы не предоставляете этот второй аргумент.

...