Vytvoření Windows DLL s Visual Fortran


Original: http://academic2.american.edu/~jpnolan/misc/fortrandll.html

Za prvé , prověří váš Fortran kód . Fortran I / O příkazy ( a případně jiné non – číselných rutiny ) mohou zkazit běhové prostředí mnoha programů, které se spojují do DLL . Nemohu si vzpomenout na problémy , ale také jsem se vzdala pomocí Fortran funkce a návratu funkčních hodnot . Já každou rutinu jako Fortran podprogram , kolem jak vstupní proměnné a výsledky výstupních jako proměnné . Jako vždy , pokuste se vektorizovat věci , pokud chcete pěkný rutina S – Plus .

Spuštění nového projektu v rámci Visual Fortran ( MS ) IDE a vyberte typ jako ” Fortran Dynamic Link Library ” .

Otevřete FORTRAN zdrojový soubor . Pro každou rutinu , kterou chcete mít k dispozici v DLL , musíte přidat ” komentář čáru “, která začíná ve sloupci 1 , jako v následujícím příkladu :

podprogram mysub1 ( a, b )
CDec $ VLASTNOSTI dllexport :: MYSUB1

podprogram mysub2 ( a, b )
CDec $ VLASTNOSTI dllexport :: MYSUB2

To je Compaq Fortran je způsob, jak říct , že kompilátor vytvořit externí ” vstupní bod ” pro MYSUB1 , atd. ( na každou běžnou potřeby tohoto druhu řádku , je to s názvem po” :: ” . Pokud nechcete dát tento řádek se ,rutina nebude vidět v DLL . může být použit uvnitř Fortran programu , ale nebude k dispozici pro externí program volání . )

Sestavit DLL v IDE , říkají nolan.dll .

Propojení DLL na S – Plus pod Windows

Pomocí editoru IDE nebo nějaký editor pro vytvoření souboru , říkají ” c : \ složka \ nolan.s ” , jako jenásledující : ( ” c : \ složka ” . By měl býtadresář / adresář , kam dát tohle Také si všimněte, že S – Plus používá klíč ” \ ” jako úniková klíč , takže nepoužívejte ho v názvu souboru , použití ” / ” ).

# S – Plus Kód odkazy na Fortran DLL
dll.load ( ” c :/ složka / nolan.dll ” , c ( ” MYSUB1 ” , ” MYSUB2 ” ) )

Definice # funkce
mysub1 < – funkce ( a, b )
{ R < – . Fortran ( ” MYSUB1 ” , as.double ( a) , as.double ( b ) )
r }
mysub2 < – funkce ( a, b )
{ R < – . Fortran ( ” MYSUB2 ” , as.double ( a) , as.double ( b ) )
r }

To říká, S -plus načíst dll , aby vstupní body MYSUB1 a MYSUB2 k dispozici S -plus , a říká, S – Plus , jaké proměnné předat . Výše uvedené údaje se vrátit rekordní r , veškeré informace o volání . Ve většině případů , jen budete chtít vrátit část záznamu , řekněme r $vrátit obsah proměnné se .

Začátek S – Plus , zadejte zdroj ( ” c :/ složky / nolan.s ” ) . To bude číst soubor nad vytvořili a definovat vstupní body . Musíte to provést při každém spuštění programu . Voláte-li mysub1 ( a, b ​​) , S -plus se pokusí volat dll a spustit je to kód . Máte-li nesprávný počet argumentů , nebo jinou chybu specifiation , může S – Plus vyhodit do povětří .

Existuje více pokročilé věci , které můžete udělat , např. kapitoly , ale to by mělo dostat jste začali . Hodně štěstí !