The slink.exe crashes
00410530 chainSectionNameExact(<ptr>char,longÄunsignedÄint) [+0165] 00410744 chainSectionName(<ptr>char,longÄunsignedÄint) [+0198] 00410fd5 chainSections(void) [+002f] 0040766a parcelUpExe(void) [+08b0] 0040c049 parseCommandLine(<ptr><ptr>char) [+03ab] 0040caf4 main [+00c3]
when compiling (this program creates a shared memory and reads and writes to it) C++ header...
extern 'C'
{
void *createShM(char *name, unsigned int &size);
void destroyShM(void * shm);
void initShM(void *shm, unsigned int start, unsigned int finish);
void setShMHour(void *shm, unsigned int hour);
unsigned int getShMState(void *shm);
void setShMState(void *shm, unsigned int state);
};
FTN95 code
PROGRAM TEST_SHARED_MEMORY
! void *createShM(char *name, unsigned int &size);
C_EXTERNAL createShM 'createShM' (ref,ref) : INTEGER
! void destroyShM(void * shm);
C_EXTERNAL destroyShM 'destroyShM' (ref)
! void initShM(void *shm, unsigned int start, unsigned int finish);
C_EXTERNAL initShM 'initShM' (ref,val,val)
! void setShMHour(void *shm, unsigned int hour);
C_EXTERNAL setShMHour 'setShMHour' (ref,val)
! unsigned int getShMState(void *shm);
C_EXTERNAL getShMState 'getShMState' (ref) : INTEGER
! void setShMState(void *shm, unsigned int state);
C_EXTERNAL setShMState 'setShMState' (ref,val)
INTEGER state,size,istate
INTEGER hour,start,finish
INTEGER handle
CHARACTER c
CHARACTER(LEN=64) name
istate=0
WRITE(*,*) 'Name: '
READ(*,*) name
size=0
handle = createShM(name,size)
WRITE(*,*) 'Create returned ', handle
WRITE(*,*) 'Enter start finish :'
READ(*,*) start,finish
CALL initShM(handle,start,finish)
state=1
CALL setShMState(handle,state)
WRITE(*,*) 'Enter (''X'' (state =0) | ''Q'' (quit) | ''Z'' (state=1)) number:'
DO
istate = getShMState(handle)
write(*,*) 'state: ', istate
READ(*,*) c
IF(c == 'Q' .OR. c == 'q') THEN
EXIT
ELSE
IF(c == 'X' .OR. c == 'x') THEN
state = 1
CALL setShMState(handle,state)
ELSEIF(c=='Z' .OR. c == 'z') THEN
state =0
CALL setShMState(handle,state)
ENDIF
READ(*,*) hour
CALL setShMHour(handle,hour)
ENDIF
END DO
WRITE(*,*) 'Destroying ShM'
CALL destroyShM(handle)
END PROGRAM