Braeuchte mal schnelle und kurze Hilfe in Visual C++

  • Also ich bin ueberhaupt nicht confirm mit Visual C++. Was zum teufel bedeutet dieser Abschnitt vom Code:


    AfxMessageBox("Projections");
    CFileDialog sinoDlg(TRUE);
    char * names = (char*)calloc(100000, sizeof(char));
    POSITION pos;
    POSITION pos2;
    sinoDlg.m_ofn.Flags = sinoDlg.m_ofn.Flags|OFN_ALLOWMULTISELECT;
    sinoDlg.m_ofn.lpstrFile = names;
    sinoDlg.m_ofn.nMaxFile = 100000;
    if(sinoDlg.DoModal()!=IDOK){
    AfxMessageBox("Wrong");
    return;
    }
    pos = sinoDlg.GetStartPosition();
    pos2 = sinoDlg.GetStartPosition();



    Mir ist klar, dass irgendwie ein Dialog geoeffnet wird und dann eine Datei geoeffnet wird, dann der Zeiger auf den Anfang der Datei gesetzt wird. Aber trotzdem habe ich nicht 100% Durchblick, was dort geschieht. Gibts irgendwie eine Moeglichkeit einen kurzen C++ equivalenten Text zu formulieren bzw. ich bekomme das einfach nicht hin. Ich wuerde mich ueber Hilfe sehr freuen.
    Ich bedanke mich im vorraus und hoffe, dass mir ein Visual C++ Kenner helfen kann.



    Gruss
    AdoMad

  • Hallo,
    also eigentlich wird da gar nichts "geöffnet" es wird ein normaler Dialog zur Dateiauswahl angezeigt,wo der benuter mehrere Dateien auswählen kann.
    Alle ausgewählten Dateinamen dürfen zusammen 100000 Zeichen lang sein.
    die ausgabe würde dann so aussehen:
    CString strEinDateiName;
    pos = sinoDlg.GetStartPosition();
    while (pos != NULL)
    {
    strEinDateiName=sinoDlg.GetNextPathName(pos);
    printf("%s\n",strEinDateiname);
    }


    Peter

  • Ich bekomme das irgendwie nicht hin in plain C oder C++ eine Datei zu oeffnen und den zeiger an den start zu setzen.



    FILE f*;
    f=fopen("pfad","modes");


    das waere C.
    richtig? Aber meine Frage zum einen ist muss bei "pfad" der pfad stehen oder kann da auch ne variable stehen in der ich den pfad der von kommandozeile eingelesen habe. Zum anderen wie wuerde das mit C++ aussehen?
    Irgendwie komm ich da nicht hinter, eine Datei auf basis einer kommandozeileneingabe in einem gewissen pfad zu oeffnen und den Dateipositionszeiger an den Anfang der Datei zu setzen.


    Hmm :(



    Danke im Vorraus
    AdoMad

  • Also nochmal mein Problem, der folgende Code ist aus einem Visual Studio 6 code programm. Ich soll/will es nun unter linux kompiliere, sprich ich muss diesen teil irgendwie in umformen mit commands die es nicht nur in visual studio gibt.
    Mein Problem ist, dass ich diesen folgenden Code nicht in "normales" C oder C++ umformen kann und da total dran haenge und das irgendwie hinkriegen muss :(.
    Code:


    SMVReaderWriter rw; //rw objekt von einer vordefinierten klasse


    AfxMessageBox("Projections");
    CFileDialog sinoDlg(TRUE);
    char * names = (char*)calloc(100000, sizeof(char));
    POSITION pos;
    POSITION pos2;
    sinoDlg.m_ofn.Flags = sinoDlg.m_ofn.Flags|OFN_ALLOWMULTISELECT;
    sinoDlg.m_ofn.lpstrFile = names;
    sinoDlg.m_ofn.nMaxFile = 100000;
    if(sinoDlg.DoModal()!=IDOK){
    AfxMessageBox("Wrong");
    return;
    }
    pos = sinoDlg.GetStartPosition();
    pos2 = sinoDlg.GetStartPosition();


    AfxMessageBox("Matrix Name");
    CString matrixName;
    rw.getFileName(&matrixName);



    AfxMessageBox("Output Name");
    CString outName;
    rw.getFileName(&outName);


    CString in = sinoDlg.GetNextPathName(pos2);
    int headerBytes, type, order;
    rw.getSMVInfo(in, &headerBytes, &detW, &detH, &type, &order);



    Thanks

  • Das wird schlicht und ergreifend überhaupt nicht gehen befürchte ich....
    CFileDialog ist ein Standartdialog von WINDOWS nicht von Linux!
    Also musst du mal in der entsprechenden Doku von Linux nachsehen,
    ein einfach ersetzten von CFileDialog durch CLinuxFileDialog wird da nicht funktionieren. Alleine schon diese m_ofn Struktur wird unter Linux total anders sein,wenn es die da überhaupt gibt.
    Peter

  • Ja genau.
    Aber diese Operationen, die gemacht werden sind doch standard operationen oder, die man doch sicherlich unter linux auch hinkriegen koennte.
    Oder verstehe ich da was falsch?

  • Nein das ist kein "Standart" da es sich bei CFileDialog wohl um einen windowsspezifischen Dialog handelt,ich kann mir beim besten Willen nicht vorstellen das der bei LinuX die selben Parameter hat,wenn es ihn da überhaupt gibt.
    Dir wird nichts anderes übrig bleiben dir die Doku durchzulesen,oder darauf zu warten das sich das hier jemand durchliest der unter Linux programmiert.


    Peter

  • Anders gefragt: Es muss doch moeglich sein einen equivalenten Code zu schreiben, von mir aus halt nicht multiple dateiauswahlen und so ein schnickschnack, sondern einfach nur datei einlesen und zum readen oeffnen:
    Irgendwie etwas wie:


    FILE f*;


    cout<<"projektionen:";
    f=fopen("dateiname","modes");




    Mal ne Andere Frage:
    Was bedeuten diese Zeilen eigentlich:
    pos = sinoDlg.GetStartPosition();
    pos2 = sinoDlg.GetStartPosition();




    AdoMad

  • Hallo,
    das sind doch 2 total verschiedene Sachen:
    -Eine Datei öffnen
    -Ein Fenster anzeigen wo man eine Datei auswählen kann


    Das mit GetStartPosition() habe ich glaube ich schon geschrieben...

  • Da hast Du Recht. Da muss ich mich fuer meine ungenauen Ausdrucksweise entschuldigen.
    Mein Ziel ist es eine Datei zu oeffnen unter den selben Bedingungen wie das Visual Studio Programm nur halt kommandozeilenbasiert.
    Aber ich muss sagen ich komme da irgendwie nicht hinter.


    Mal als einen Anfang wuerde ich mir folgendes denken:


    ifstream fin;
    char datei[100];
    cout<<"Bitte Datei eingeben:";
    cin>>datei;
    fin.open(datei);


    Verpeile ich irgendetwas?
    Steht jetzt der Zeiger auf dem Anfang der datei?



    Gruss
    AdoMad

  • pos = sinoDlg.GetStartPosition();
    pos2 = sinoDlg.GetStartPosition();



    diese Zeilen habe ich nicht so wirklich in deinen Texten vorher gefunden.
    Was ich nicht verstehe:
    1.) was bedeutet das?
    2.) warum zweimal?



    Ich bin total confused :(


    VIelen Dank
    AdoMad

  • Diese ZWEI Zeilen machen so auch überhaupt keinen Sinn,
    schau dir mal in meinenm Beispiel GetStartPosition(); und GetNextPathName(pos); an,so ist das richtig

  • Noch eine andere Frage: Sind CString Objekte unter Linux lauffaehig mit entsprechenden Klassenimplementierungen? Wenn ja, wo bekommt man diese Klassen mit Doku?


    Danke



    P.S.: Sehr nettes und gutes Forum. Gute Arbeit an die Admins und alle die damit zu tun haben.

  • Sprich ich koennte unter Implementierung des alten Codes mit der Classe String einfach den Code uebernehmen oder sind die Inhalte der Klassen unterschiedlich?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!