Я прочитал много постов на похожую тему, но мне пока не удалось решить эту проблему.Я должен отметить, что я значительно упростил свой код для этого поста.Я собираюсь использовать функцию ac, вызывая ее из fortran77 и получая обратно значения от c.Тот факт, что я упоминаю fortran77, связан с тем, что я хочу связать свой код с гораздо более крупным проектом, использующим fortran77, но я готов рассмотреть решения с другими версиями fortran, если они выполнят свою работу и если вы считаете, что они упростят мою проблему.
У меня есть два файла: Try_stack.f и client2.c.Я компилирую свой код как:
gcc -c client2.c
gfortran -g Try_stack.f client2.o -o combined
Мой файл Try_stack.f:
program circle
call circle2
stop
end
subroutine circle2
dimension rread(2)
double precision r, area,rread
external client
area = 3.
rread(1)=area
rread(2)=area+10.
write (*,*) 'Area = ', rread(1)
call client(rread)
retNread = rread(1) * 2
write(*,*) 'new nread is: ',retNread
return
end
И мой файл client2.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
int client_(double rread[2])
{
double result;
result=1.;
rread[1]=result;
printf("%.2lf",rread);
return 0;
}
После запускаскомпилированная версия, которую я получаю:
Area = 3.0000000000000000
0,00 новый nread: 6.00000000
Но я хотел, чтобы возвращаемое значение для программы на языке fortran было равно 8.000 вместо 6.0000(потому что fortran отправляет значение 3., 1. добавляется к 3. и 4.0 должно вернуться обратно в fortran для умножения его на 2.).Если бы я хотел написать это простым способом, чтобы объяснить это, я бы сказал:
Во-первых, я хочу, чтобы файл fortran отправил номер 3. в c (на самом деле я хочу обменятьсямассивы).
Во-вторых, я хочу, чтобы файл c взял номер 3. и добавил 1.
В-третьих, я хочу, чтобы c вернулвернуть результат в файл fortran, то есть число 4.
- Наконец, я хочу, чтобы fortran продолжил вычисления, в этом случае умножьте 4 * 2 = 8.
Iмного читал о iso_c_binding, но мне явно не удалось его использовать, плюс для этого требуются последние версии Fortran, если я правильно понимаю.Любая помощь будет высоко ценится.