Pour utiliser Fortran dans vos fonctions personnalisées
Création d'une bibliothèque Fortran
1. Créez un nouveau projet Fortran Static Library dans Compaq Visual Fortran 6.6B, puis ajoutez vos fichiers au projet.
2. Sous le menu Build, cliquez sur Set Active Configuration, puis sélectionnez Release.
3. Compilez et créez. Le sous-dossier Release de votre projet Fortran contient à présent [myfortranlib].lib.
Modification du code C pour la fonction personnalisée
Après avoir créé une bibliothèque Fortran, vous devez ajouter votre code 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;
}
Liaison à la bibliothèque
1. Dans un projet C existant dans MS Visual C++ ou Visual Studio, sélectionnez l'onglet Linker, puis Input, depuis le menu Category. Entrez [myfortranlib].lib dans la zone de texte Object/library modules située à la fin de la liste.
2. Entrez libc.lib dans la zone de texte Ignore libraries.
3. Entrez le chemin d'accès du fichier [myfortranlib].lib dans la zone de texte Additional Library Path, par exemple C:\temp.
4. Compilez et créez la DLL.
Informations supplémentaires
• Le code Fortran doit être exécuté en tant que fil distinct, plutôt que fonction. Ainsi, si le processus est arrêté, par exemple, en appuyant sur Esc, l'ensemble du fil peut être arrêté sans que vous ayez à vérifier quel sous-programme Fortran est toujours actif.
• Nous vous conseillons de remplacer toutes les instructions STOP dans le code Fortran par une fonction spéciale renvoyant un code d'erreur vers le C appelant, qui arrêtera le fil en toute simplicité.
• Si le code Fortran contient PRINT vers les instructions de console, elles peuvent être converties en réaffectant la console à un fichier, de sorte que la sortie soit transmise à un fichier plutôt qu'à l'écran. Si la routine Fortran s'arrête avec une erreur, vous pouvez programmer le principal C++ pour lire ce fichier journal et l'afficher en tant que fenêtre. Exemple :
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
• Si vous souhaitez distribuer une DLL Fortran, vous devez installer les bibliothèques d'exécution Fortran appropriées sur l'ordinateur. Vous pouvez utiliser les bibliothèques d'exécution Fortran suivantes :
◦ DFORRT.DLL
◦ DFORRTD.DLL
◦ DFORMD.DLL
◦ DFORMDD.DLL
◦ DFDLG100.DLL
◦ MSVCRT.DLL
S'il manque des DLL, des erreurs se produiront. Les DLL sont mises en package avec votre compilateur Fortran. Vous devez les installer dans le répertoire Windows/system32/ ou WINNT/system32/.