Why can fail a connection of a struct to a FORTRAN COMMON in Mingw?

P

Pedro567

We are having a problem to match properly a C++ struct exported as
dll using GNU g++ 4.4.0 with a COMMON block in Fortran using GNU
gfortran 4.4.0. Tt works properly in Linux version, but not with
Mingw. Probably we are missing something in this platform. Any help
will be welcomme.

Code in C++ (compiled as a dll):
extern "C"
{
extern struct {
int n;
int k;
} area_ ;
}

extern "C" __declspec(dllexport) void view_() { area_.n= 83; printf("c
++, n=%d , k=%d \n",area_.n,area_.k); return; }

Code in FORTRAN (main program calling the previous dll):
BLOCK DATA t
INTEGER N,K
COMMON /AREA/ N,K
END

PROGRAM P456
COMMON /AREA/ N,K
N = 3
K = 6
WRITE(*,*) N,K
CALL view
WRITE(*,*) N,K
END PROGRAM

We add an extra C file to the dll for compiling independly of FORTRAN:
__declspec(dllexport) struct {
int n;
int k;
} area_ ;

Using GNU g++ and gfortran in Mingw the area_ struct is not properly
shared and two
copies are used in memory, the output is wrong:
3 6
83 0
3 6
But using GNU g++ and gfortran 4.4 in Linux Debian and Microsoft C++
6.0, 2003 and 2008 we
obtain a correct result:
3 6
83 6
83 6

The AREA common block in FORTRAN does not point to the same struct
area in C++ dll, why?

Why fails only in Windows platform using GNU C++ compiler?

Thanks for any help
Pedro
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,576
Members
45,054
Latest member
LucyCarper

Latest Threads

Top