Re: [Fortran] вопрос: экспорт функции из DLL
complex(8pointer :: A(:,:)
Если не заработает (бывает такое в подпрограммах где это формальный параметр, сейчас не помню когда такое получается то попробуй
complex(8target :: A(:,:)
И еще вопрос. Теперь в этой функции у меня есть указатель А на какой-то массив. Еще имеется массив такого же размера A_local. Нужно перегнать все элементы из массива, на который ссылается указатель A, в массив A_locаl. Как это сделать?
просто приравнять их
не компилируется
Все должно работать.
SUBROUTINE GET_EVAL(N, A, B, ALPHA_eval, BETA_eval, EVEC)
USE DFLIB
USE DFIMSL
!DEC$ IF DEFINED (_DLL)
!DEC$ ATTRIBUTES DLLEXPORT :: GET_EVAL
!DEC$ END IF
integer,INTENT(IN) :: N
double complex, dimension(:, target, INTENT(IN) :: A
double complex, dimension(:, target, INTENT(IN) :: B
double complex, dimension(N INTENT(OUT) :: ALPHA_eval
double complex, dimension(N INTENT(OUT) :: BETA_eval
double complex, dimension(N INTENT(OUT) :: EVEC
integer :: LDA, i=1, j=1
integer :: LDB
integer :: LDEVEC
double complex,allocatable :: A_local(:, B_local(:,:)
allocate(A_local(N,N
allocate(B_local(N,N
A_local = A
B_local = B
!Loop1: do i=1, N
! Loop2: do j=1, N
! A_local(i,j) = A(i, j);
! B_local(i,j) = B(i, j);
! write (*, *) 'from DLL - in cycle', real(B_local(i,j
! write (*, *) 'from DLL - in cycle j = ', j
! write (*, *) 'from DLL - in cycle N = ', N
! End do Loop2
! write (*, *) 'from DLL - in cycle i = ', i
!end do Loop1
LDA = N
LDB = N
LDEVEC = N
Call DGVCCG(N, A_local, LDA, B_local, LDB, ALPHA_eval, BETA_eval, EVEC, LDEVEC)
!write (*, *) 'from DLL: ALPHA_eval = ', imag (ALPHA_eval(7
!write (*, *) 'from DLL: BETA_eval = ', imag (BETA_eval(7
deallocate(A_local)
deallocate(B_local)
end subroutine GET_EVAL
вот такой вариант компилируется, но при приравнивании прога вылетает из-за ошибки с памятью. Пробовал приравнять поэлементно - вылетает после приравнивания 1 элемента
Че-то я не понял, а если написать
double complex :: A(N,NB(N,N)
не работает что ли?
а если написать
double complex :: A(N,NB(N,N)
да, так вроде работает.
Но там дальше получается лажа, исходящая из IMSL-функции DGVCCG. На выходе выдает числа порядка 10^227
Оставить комментарий
biser
Имеется следуюущий кусок фортрановской функции:переменные А и В передаются из Сишной программы и имеют вид
Kак в фортрановской функции правильно объявить переменные А и В, чтобы они соответствовали передаваемым им значениям, т.е являлись указателями на двумерный массив (указателем на указатель)?