использование dll в матлабе

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


person Mehrdad    schedule 17.02.2010    source источник


Ответы (3)


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

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

person High Performance Mark    schedule 17.02.2010

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

person Conspicuous Compiler    schedule 17.02.2010

Вам необходимо предоставить заголовочный файл, определяющий каждую из именованных функций в Fortran DLL, которую вы будете вызывать. Например, если ваша 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);

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

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

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

person Barron    schedule 18.10.2011