Funzioni personalizzate > Utilizzo di Fortran > Per utilizzare Fortran nelle funzioni personalizzate
  
Per utilizzare Fortran nelle funzioni personalizzate
Creare la libreria Fortran
1. Creare un nuovo progetto Fortran Static Library in Compaq Visual Fortran 6.6B e quindi aggiungere i file al progetto.
2. Nel menu Build scegliere Set Active Configuration e quindi selezionare Release.
3. Compilare e generare la libreria. La sottocartella Release del progetto Fortran contiene ora [myfortranlib].lib.
Modificare il codice C per la funzione personalizzata
Quando si dispone della libreria Fortran, è necessario aggiungere il codice C:
extern void __stdcall FORTRANFUNCTION(const double *array1, const double *scalar1 [, etc.]);
// Since FORTRAN typically expects arguments by reference, arguments are passed
// as pointers. To pass values, the FORTRAN code must contain a compiler directive
// telling the function to expect a value rather than an address.
LRESULT mcadfunction(LPCOMPLEXARRAY array1, LPCCOMPLEXSCALAR scalar1, etc.)

// this defines the function before FUNCTIONINFO, using the same variable names
// called by the external FORTRAN function.
{
// some error checking goes here, followed by the
// actual call to the FORTRAN function. For example,
FORTRANFUNCTION(&array1->hReal[0][0], &scalar1->real [, etc.]);

// Either the function call must be in UPPERCASE, or you will have to set
// Settings->FORTRAN->External procedures->External name implementation
// to "Upper case" in your FORTRAN compiler. Any other C functionality follows...
return 0;

}
Collegare la libreria
1. In un progetto C esistente in MS Visual C++ o Visual Studio selezionare la scheda Linker, quindi scegliere Input (singolo) dal menu Categoria. Immettere [myfortranlib].lib nella casella di testo Object/library modules alla fine dell'elenco.
2. Immettere libc.lib nella casella di testo Ignore libraries.
3. Immettere il percorso del file [myfortranlib].lib nella casella di testo Additional Library Path, ad esempio C:\temp.
4. Compilare e generare la DLL.
Ulteriori informazioni
Il codice Fortran deve essere eseguito come thread separato anziché direttamente come funzione. In questo modo, se il processo viene terminato, ad esempio premendo Esc, è possibile terminare l'intero thread senza identificare la subroutine Fortran attualmente attiva.
È utile sostituire tutte le istruzioni STOP nel codice Fortran con una speciale funzione che restituisca un codice di errore al codice C chiamante, che terminerà il thread in modo appropriato.
Se il codice Fortran contiene istruzioni PRINT per la console, queste possono essere convertite riassegnando la console a un file, in modo che l'output venga restituito a un file anziché allo schermo. Se la routine Fortran termina con un errore, è possibile programmare il front-end C++ perché legga questo file di log e lo visualizzi come finestra. Ad esempio:
SUBROUTINE INIT_STDOUT ()
c this subro which redirects FORTRAN output to file
use dfwin
integer res

c CALL close_stdout
res=SETENVQQ("FOR_PRINT=C:\FORT_OUT.TXT")

c PRINT *, 'Print a character to initialize '
PRINT *,' '
RETURN
END
Se si desidera distribuire una DLL basata su Fortran, nel computer che la esegue devono essere installate le librerie di runtime Fortran appropriate. È possibile utilizzare le librerie di runtime Fortran indicate di seguito.
DFORRT.DLL
DFORRTD.DLL
DFORMD.DLL
DFORMDD.DLL
DFDLG100.DLL
MSVCRT.DLL
Se queste DLL risultano mancanti, vengono restituiti errori. Il pacchetto delle DLL viene creato con il compilatore Fortran. È necessario installare le DLL nella directory Windows/system32/ o WINNT/system32/.