String aus C/C++ nach Fortran übergeben



  • Hi!

    Ich suche seit Tagen vergeblich nach einer Möglichkeit aus meinem C Programm eine Zeichenkette an mein Fortran Programm übergeben zu können!

    Stelle mir das in etwa so vor:
    Habe eine Datei (console.f90) in der sich meine Subroutines befinden mit Hilfe derer ich auf mein C++ Programm (openfile.cpp) zugreife. Dieses C++ Prog. liefert mir einen Character String zurück, der dann dem C++ File zur Verfügung steht aber leider nciht meinem Fortran (Main) Program!!

    console.f90:

    module cproc
         interface  ! definierte Schnittstelle 
    		subroutine fenster
    	     !DEC$ ATTRIBUTES C :: fenster
    	         end subroutine
         end interface
    end module
    
    	program open_file
    	USE DFWIN
    	use cproc
    	call fenster
    	end program
    

    openfile.cpp:

    #include <stdio.h> 
    #include <windows.h> 
    
    extern "C" void fenster() 
    { 
    
    OPENFILENAME ofn; 
    char szFile[260]; 
    
    HANDLE hf; 
    
    ZeroMemory(&ofn, sizeof(ofn)); 
    ofn.lStructSize = sizeof(ofn); 
    ofn.hwndOwner = NULL; 
    ofn.lpstrFile = szFile; 
    
    ofn.lpstrFile[0] = '\0'; 
    ofn.nMaxFile = sizeof(szFile); 
    ofn.lpstrFilter = "All\0*.*\0"; 
    ofn.nFilterIndex = 1; 
    ofn.lpstrFileTitle = NULL; 
    ofn.nMaxFileTitle = 0; 
    ofn.lpstrInitialDir = NULL; 
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 
    
    if (GetOpenFileName(&ofn)==TRUE) 
        hf = CreateFile(ofn.lpstrFile, GENERIC_READ, 
            0, (LPSECURITY_ATTRIBUTES) NULL, 
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 
            (HANDLE) NULL); 
    
        printf(ofn.lpstrFile);
    
    }
    

    Das funktioniert auch soweit nur möchte ich gerne den Inhalt von "ofn.lpstrFile" in meinem Fortran Programmteil bereitgestellt haben (irgendwo in console.f90, egal ob als eigene subroutine, externe datei die vom console.f90 wieder eingelesen wird oder sonstetwas). Wie kann ich ofn.lpstrFile an mein Fortran Programm übergeben???

    <edit=kingruedi> sfds </edit>



  • Ich versteh dein Problem jetzt nicht, du kannst ja einfach ein char-Array zurückgeben. Bedenke nur die Lebenszeit der Variable bzw. des Speichers auf den gezeigt wird.

    Zu not nimmst du immer einen String als Parameter und kopierst da hin.



  • Aus C nach Fortran? Nein leider kann C/C++ kein Char-Array zurückgeben da C die Null-terminierung verwendet und Fortran nicht! Unter Fortran muss die genaue Länge des Strings übergeben werden, außerdem ist es nicht ganz einfach einem C Programm zu sagen wo sich die Fortran Subroutine befindet (extern "C" und so'n Kram)! Trotzdem Danke, ich hab das Problem nun endlich nach 2 Tagen gelöst bekommen 😃 Will das hier allerdings lieber nicht posten da die #include Dateien welche ich dafür mit eingebunden habe etwas zu umfangreich wären... 🙄



  • also bisher hatte ich keine Probleme damit C-Strings in Fortran zu benutzen. Ich hab hier ein Beispiel liegen, wie das andersrum geht (man lässt sich einen C String in Fortran befüllen (Fortran77)). Wenn das hilft, kann ich das gerne posten.



  • Danke, habs hinbekommen aber ich werd bestimmt noch mehr Probleme finden bei denen ich Hilfe gebrauchen kann 😛 Zur Übergabe von Character Arrays und ähnlichem hab ich hier ne gute HP gefunden die auch Fortran Bibliotheken bereitstellt die das Leben etwas einfacher machen... jetzt muss ich mich erstmal wieder mit WinApi Programmierung beschäftigen und dem Problem wie ich die GetOpenFileName Funktion dazu bringe mich einen Ordner auswählen zu lassen und den Dateinamen per Tastatur einzugeben und die Datei daraufhin in dem Ordner (der grade ausgewählt wurde) zu erzeugen (falls Datei noch nicht vorhanden ist)!

    http://home.online.no/~arnholm/cppf77.htm#Section3.3



  • SHBrowseForFolder


Anmelden zum Antworten