Laden...

16-Bit-Anwendung (Fortran) unter Win7(64Bit) verwenden/integrieren oder neu compilieren?

Erstellt von halunke86 vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.247 Views
H
halunke86 Themenstarter:in
22 Beiträge seit 2011
vor 12 Jahren
16-Bit-Anwendung (Fortran) unter Win7(64Bit) verwenden/integrieren oder neu compilieren?

Hallo,

ich habe eine Dos-Anwendung, welche ich in mein C#-Programm integrieren möchte. Da dieses jedoch auch unter 64Bit-Betriebssystemen laufen soll, habe ich mir überlegt, anstelle eines direkten Aufrufs einen Dos-Emulator zu rufen und über diesen das Dos-Programm zu starten.

Hat jemand mit einer solchen Methode schon Erfahrungen gesammelt bzw. weiß, ob dies grundsätzlich möglich ist.

Oder gibt es eventuell noch eine elegantere Möglichkeit, diese Problematik zu umgehen?

Vielen Dank schonmal im Voraus

Gruß halunke86

1.130 Beiträge seit 2007
vor 12 Jahren

Was macht denn dein 16 bit Programm?

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

H
halunke86 Themenstarter:in
22 Beiträge seit 2011
vor 12 Jahren

Ist ein Programm zur Berechnung von Bodenwellen...
Wurde in Fortran programmiert, habe mir auch schon möglichkeiten überlegt, dieses mit Hilfe von dll's in C# zu integrieren, jedoch fehlt mir im Moment noch der richtige Compiler und ich bin mir nicht sicher, ob ich an diesen rankomme.

Ich muss dem Programm Parameter mitübergeben und das Programm erzeugt mir dann eine Ausgabedatei, welche ich daraufhin in C# parsen und anschließend weiterverarbeiten möchte.

Gruß halunke86

5.742 Beiträge seit 2007
vor 12 Jahren

jedoch fehlt mir im Moment noch der richtige Compiler und ich bin mir nicht sicher, ob ich an diesen rankomme.

Wäre aber IMHO das Sinnvollste - Fortan Compiler sollte es ja einige geben.

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

wenn du den Fortran-Code würde ich das mit einem aktuellen Compiler in eine (native) DLL übersetzen und diese dann verwenden.
Wenn du keinen kommerziellen Compiler verwenden willst kannst du schauen ob es die Testversionen zulassen produktiven Code zu erstellen oder du verwendest den freien GNU Fortran-Compiler - ich weiß nicht wie es aktuell bei dem ist, aber früher übersetzt dieser zuerst nach C und kompilierte das und dadurch ein Teil der "Fortran-Power" flöten.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

H
halunke86 Themenstarter:in
22 Beiträge seit 2011
vor 12 Jahren

Ich habe jetzt schon einige ausprobiert, jedoch kamen diese nicht mit dem Code zurecht. Ich weiß aus der Manual dass es mit Microsofts Fortran V4.01 funktionieren soll, kann diesen aber nirgends finden.

Falls jemand zufällig weiß wie ich an diese Rarität rankomme wäre das super.

(werde es mal mit dem GNU compiler versuchen)

Gruß halunke86

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

Ich weiß aus der Manual dass es mit Microsofts Fortran V4.01 funktionieren soll, kann diesen aber nirgends finden.

Einen noch älteren findest du in Retro-Archive 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

H
halunke86 Themenstarter:in
22 Beiträge seit 2011
vor 12 Jahren

Weiß zufällig jemand, wie man diesen Compiler ausführt? Habe keine Manual gefunden.

Gruß halunke86

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

wenn du den meinst aus dem Retro-Archiv würde ich den nicht nehmen denn du steckt damit wieder im 16bit-Dilemma fest. Nimm besser den GNU-Fortran der ist wenigsten auf dem aktuellen Stand.

Für den GNU-Fortran gibt es eh eine Wiki wo auch beschrieben wird wie das Kompilieren angestoßen wird.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

H
halunke86 Themenstarter:in
22 Beiträge seit 2011
vor 12 Jahren

Ich habe es in der Zwischenzeit geschafft, den Fortran Code mit Intels Visual Fortran Compiler zu kompilieren.
Konnte mir auch gleich eine DLL erzeugen, werde jetzt mal experimentieren, wie die Variablenübergabe klappt.

Falls ich mal noch die Zeit finden werde, werde ich es auch noch mit dem GCC versuchen.

Vielen Dank auf jedenfalls nochmal für die Hilfe.

Gruß halunke86

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo,

mit Intels Visual Fortran Compiler zu kompilieren. Konnte mir auch gleich eine DLL erzeugen

Achte darauf dass standardmäßig Fortran eine andere Parameterübergabe als C-ähnliche Sprachen haben -> im Compiler sollte es ein Flag für C-Style geben.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

906 Beiträge seit 2005
vor 12 Jahren

lass es per DOSBOX unter einem 64Bit Windows laufen. Sparst du dir viel Mühe.

Hinweis von herbivore vor 12 Jahren

Threads zusammengefügt

Auch wenn der Focus sich etwas verschiebt, geht es ja immer noch um das gleiche Kernproblem.

H
halunke86 Themenstarter:in
22 Beiträge seit 2011
vor 12 Jahren
Fortran-DLL in C# integrieren

Hallo,

es kann gut sein, dass diese Frage ein wenig übergreifend ist (mit Fortran), jedoch stelle ich sie trotzdem mal an dieser Stelle:

Ich habe ein relativ komplexes Fortran-Programm, welches aus einem Hauptprogramm und vielen Subroutines und Functions besteht. Es gibt hierbei eine "Main-Subroutine", welche ich letztenendes in eine DLL exportieren möchte.
Ich habe im Netz schon folgendes "Kochrezept" gefunden, mit welcher ich die DLL's in C# integrieren kann.
Soweit ich es bis jetzt beurteilen kann, müsste ich jedoch für jede Subroutine eine DLL generieren.
Gibt es eine Möglichkeit, die ganzen Subroutines in eine "Klasse" zu packen und aus dieser eine DLL generiere?
Und eine 2. Frage: Hat jemand mit dieser Methode schon Erfahrungen gesammelt und weiß, ob ich die Ausgabe der DLL direkt in eine Datei schreiben kann?

Danke schonmal im Voraus

Gruß halunke86

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo halunke86,

das geht ja noch alles lustig durcheinander.

Erstmal ist es wichtig, ob wir über eine native oder eine .NET-DLL sprechen. Nach dem oben gesagten würde ich auf eine native DLL tippen. Korrekt?

Ich habe im Netz schon folgendes "Kochrezept" gefunden, mit welcher ich die DLL's in C# integrieren kann.

Hast du den Link vergessen?

Soweit ich es bis jetzt beurteilen kann, müsste ich jedoch für jede Subroutine eine DLL generieren.

Nein, natürlich nicht. Eine DLL kann beliebig viele Funktionen exportieren.

Gibt es eine Möglichkeit, die ganzen Subroutines in eine "Klasse" zu packen und aus dieser eine DLL generiere?

Wir reden doch über Fortan. Gibt es da Klassen? Ich weiß es nicht. Und selbst wenn: Wenn es um eine native DLL geht, ist es besser, einfache Funktionen (und nicht Methoden eine Klasse) zu exportieren.

Und eine 2. Frage: Hat jemand mit dieser Methode schon Erfahrungen gesammelt und weiß, ob ich die Ausgabe der DLL direkt in eine Datei schreiben kann?

Was für eine Ausgabe? Konsolenausgabe? Du hast doch den Code des Fortan-Programms. Warum schreibst du die Ausgabe nicht direkt in die gewünschte Datei?

Beachte bitte [Hinweis] Wie poste ich richtig? Punkt 1.1.1. Ohne dir zu nahe treten zu wollen, lesen sich die Fragen so, als wüsstest du nicht so genau, was du da tust, bzw. als ob du dich noch nicht gründlich genug in das Thema eingelesen hast. Wir helfen gerne, wenn wir merken, dass die Eigeninitiative stimmt.

herbivore

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo halunke86,

ich sehe das gleich wie herbivore 😉

Wenn du einen vernüftigen Fortran-Compiler hast - wie oben geschrieben den Intels Visual Fortran - dann kann doch aus allen Teilen des Fortran-Code, außer dem program-Abschnitt - eine C-Style-DLL erstellt werden und diese per DllIMport in .net vewrendet werden. Schau dir mal die Dokumentation zum Compiler an - dort gibt es gewiss einen Abschnitt der C-Style-DLLs behandelt (ich kenn zwar diesen Compiler nur vom Namen her, aber ich bin mir trotzdem sicher).

Sollte es nicht möglich sein eine C-Style-DLL zu exportieren gibt es immer noch die Möglichkeit den Fortran-Code zu kompilieren, aber nicht zu binden. Beim Kompilieren entsteht ein *.obj und dieses kann mit einem C-Compiler (bzw. Linker) verwendet werden. Aber auch das steht in der Compiler-Doku 😉

Zu beachten ist das Fortran column-major ist während C-ähnliche row-major ist. V.a. ist Vorsicht geboten ob das beim DLL-Export berücksichtigt wird oder nicht, aber auch das steht in der Compiler-Doku. Wenn nicht transponieren nicht vergessen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

D
53 Beiträge seit 2011
vor 12 Jahren

Ich habe mal in einer Zeitschrift etwas gelesen von Fortran.Net gelesen, dass müsste sich doch anbieten damit hat man dann direkt CLI-Code hat.

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo dsdsfga,

ja Fortran.net gibt es bzw. einige Compiler-Hersteller unterstützen das. Ich halte aber nicht viel davon und bevorzuge für die IL-Code-Erstellung lieber C# (nicht nur wegen der "eigenartigen" Syntax die Fortran da aufgebrummt wird).

Fortran wird ja v.a. im numerischen Bereich wo es um hohe Leistung geht verwendet und gerade da ist es vorteilhaft hoch optimierten Maschinencode zu erzeugen. Ein Fortran.net-Compiler erzeugt hingegen optimierten IL-Code und dieser wird dann vom JITer nach Maschinencode übersetzt. Der Vorteil der Fortran-Optimierung kommt also nicht so zum Tragen - bzw. anders zum Tragen als ev. beabsichtigt - wie bei einem reinen Fortran-Compiler. Weiters kann es sein dass die Optimierungs-Strategie des JITers über den Haufen geworfen wird und am Ende sogar langsamerer Code herauskommt (ist eine reine Vermutung von mir - habs noch nicht getestet).

Der Weg Fortran -> native DLL -> Verwendung in .net ist mMn daher besser. Der einmalige zusätzliche Aufwand und der eventuellen Transformation der Argumente fällt dabei nur unwesentlich ins Gewicht, v.a. wenn Fortran für das verwendet wird für das es gedacht ist: number crunching

Oder anders: Jedes Tool und jede Sprache sollte für ihren eigenen definierten Aufgabenbereich zum Einsatz kommen. Alles andere sehe ich als Vergewaltigung dessen 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"