У меня серьезная проблема с вызовом фортрановской подпрограммы (F77) с помощью C ++ Wrapper.
Работает хорошо, но извлеченные данные из массива, в основном генерируемые подпрограммой, немного ошибочны. Если я использую подпрограмму родной F77 Prog, она работает нормально.
Код обёртки:
#include <iostream>
extern"C" void calc_(int *pIDID, double pPROP[2][41], int&, int&, double&, int&, double&, int&, int&);
using namespace std;
int main(){
int cNPRCIS = 2;
int cNUNITS = 2;
int cJOUT = 11111;
int cJIN1 = 7;
int cJIN2 = 3;
double cVALU1 = 35.0;
double cVALU2 = 20.0;
double cPROP[2][41];
cPROP[0][40] = 0.550;
int cIDID;
calc_(&cIDID, cPROP, cJOUT, cJIN1, cVALU1, cJIN2, cVALU2, cNPRCIS, cNUNITS);
for (int i= 1; i < 13; ++i)
{
cout << cPROP[0][i] << " ";
}
return 0;
}
Запуск прог дает мне
269.472 7.71878 20 50 0.840333 0 0 0 0 0 0 0
Segmentation fault
Но это должно быть:
2.6947 7.7188 20 50 0.84033 0 0 9.9741 48.474 -41.988 35.000 -28.514
Адресация строк и столбцов кажется верной?
(Из-за авторских прав мне не разрешается размещать любую подпрограмму, которая является частью базы данных)
Но это те типы переменных, которые используются правильным рабочим нативным Fortranprog.
ДВОЙНАЯ ТОЧНОСТЬ VALU1, VALU2, PROP (0: 41,0: 2)
INTEGER IDID, NUNITS, NPRICS, INP1, INP2, JOUT
Я использовал это как: http://www2.astro.indiana.edu/~jthorn/c2f.html
Эта проблема может быть вызвана указателем (возможно, потому что я использую оба направления?), Но я новичок …. поэтому я не знаю, что делать. Все подобные вопросы на этом форуме не могли помочь мне ни.
Я был бы очень рад, если бы кто-то мог мне помочь с этим.
С уважением
Задача ещё не решена.