Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Anweisungen Hilfe Bitte

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
21.07.2004, 08:17 Uhr
ao

(Operator)


Dann zeig mal deinen Sourcecode. Nicht alles, nur den Teil, um den es geht.
Dieser Post wurde am 21.07.2004 um 08:18 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
21.07.2004, 11:43 Uhr
~wasa
Gast


tagchen!

okay! Ich hoffe du kommst damit zurecht!!!
VIELEN DANK SCHONMAL!

In dem folgenden Code wird im Verzeichnis nach einer Befehlsdatei gesucht. Wenn erfolgreich dann öffne com und beginne auszulesen.

C++:
WIN32_FIND_DATA V_Data;                //DatenVerzeichnis
    
    CString s_file,s_temp,s_Schreibe, s_Eintrag="";
    char    c_Daten[13];
    FILE*    f_File;
    
             // Verzeichnisabfrage
    while (verz_i_Flag)
    {
    HANDLE hSearch = FindFirstFile("C:\\Messungen\\*.what",&V_Data);

    if((int) hSearch!=-1)
    {
    Onleeren();
    ListenEintrag("-----Datei gefunden-----");
    s_temp = V_Data.cFileName;
    s_file = "C:\\Messungen\\";
    s_file = s_file+s_temp;
    s_Eintrag.Format("Datei:%s",s_file);
    ListenEintrag(s_Eintrag);
        
             // Inhalt der Datei        
    f_File    = fopen(s_file,"rt");
    s_temp = fgets(c_Daten,13,f_File);
    s_Eintrag.Format("Daten: %s",s_temp);
    ListenEintrag(s_Eintrag);

    s_Eintrag.Format("Wiederholungen: %c", c_Daten[0]);
    ListenEintrag(s_Eintrag);
    s_Eintrag.Format("Intervall: %c", c_Daten[1]);
    ListenEintrag(s_Eintrag);
    
    // COM1 wird geöffnet
    com_ComHandle1=com_port_1.Open_Comport_HS();
    Sleep(2000);
    ListenEintrag("COM geöffnet!!");
    
    
    // COM1 wird gelesen
    com_port_1.Read_Comport_HS(com_ComHandle1, 14, L);
    s_Eintrag.Format(" Lesen: %s", L);
             //Ausgabe    
             ListenEintrag(s_Eintrag);
    
             //das nachfolgende ist der Sourc Code aus dem anderen Beispiel
    L1[0]=L[0]&15;
    for(n=0;n<8;n++)
    L1[1+n]=((L[2*n+1]&15)<<4)|(L[2*n+2]&15);
    if ((L1[3]&0x7f)==0x68)
    {
            it=9999999;
    }
    else
    {
        int dig[10]={0xd7,0x05,0x5b,0x1f,0x27,0x3e, 0x7e,0x15,0x7f, 0x3f};
        int n;
        x=x&0x7f;
        for(n=0;n<10;n++)
        {
        x==dig[n];
        }
        it=1000.0*L1[1]+100.0*L1[2]+10*L1[3]+1*L1[4];
    }
    if (L1[4]&0x80)
            it=it/10.0;

        if (L1[3]&0x80)
            it=it/100.0;

        if (L1[2]&0x80)
            it=it/1000.0;
            
        if (L1[1]&0x80)
            it=-it;
        ListenEintrag(it);
        //    dvm_unit(L1[0], (L1[5]<<16)|(L1[6]<<8)|L1[7],units);
        //timestamp();

    CString s_Eintrag="";
    
    char *prefix="";
    char *unit="";
    char *ext="";
    char *ext1="";

    if (x&0x2000)
        ext="delta";
    else if (x&0x100000)
        ext="Diode";
    else if (x&0x10000)
        ext="Beep";
    
    if (x&0x080000)
        prefix="m";
    else if (x&0x800000)
        prefix="u";
    else if (x&0x400000)
        prefix="n";
    else if (x&0x020000)
        prefix="M";
    else if (x&0x200000)
        prefix="k";

    
    if (x&0x0800)
        unit="A";
    else if (x&0x0200)
        unit="Hz";
    else if (x&0x40000)
        unit="%";
    else if (x&0x10)
        unit="°C";
    else if (x&0x4000)
        unit="Ohm";
    else if (x&0x0400)
        unit="V";
    else if (x&0x8000)
        unit="F";

    s_Eintrag.Format("%s%s %s (%s)", prefix, unit, (y&0x8?"AC":""),ext);
    ListenEintrag("TEST");
    ListenEintrag(s_Eintrag);
             //Ende Source Code des anderen Beispiels welches ich nur  
               eingebunden habe
    
    Sleep(1000);

    
             //Datei schliessen und löschen
    fclose(f_File);
    DeleteFile(s_file);
    TRACE("\n\n*************Datei %s wurde gelöscht*************\n\n",s_file);
    s_Eintrag.Format("Datei %s wurde gelöscht",s_file);
    ListenEintrag(s_Eintrag);
    Sleep(2000);
    }
    else //Wenn keine datei gefunden
    {
    ListenEintrag("-----keine Datei gefunden-----");
    Sleep(1000);

    }



cu wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
21.07.2004, 12:09 Uhr
ao

(Operator)



Zitat von wasa:


C++:
    if ((L1[3]&0x7f)==0x68)
    {
            it=9999999;
    }
    else
    {
        int dig[10]={0xd7,0x05,0x5b,0x1f,0x27,0x3e, 0x7e,0x15,0x7f, 0x3f};
        int n;
        x=x&0x7f;
        for(n=0;n<10;n++)
        {
        x==dig[n];
        }
        it=1000.0*L1[1]+100.0*L1[2]+10*L1[3]+1*L1[4];
    }





Dieses Stück hast du falsch kopiert, besonders die Schleife von 0 bis 10. Du musst in der Schleife vergleichen ob x == dig[n] ist, und wenn ja, das n zurückgeben. Dann mit dem n (nicht mit den L1-Daten) den it-Wert berechnen. Schau es dir im Original noch mal an.

Das einfachste wird sein, du verwendest diese digit()-Funktion genau wie in der Vorlage.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
21.07.2004, 14:18 Uhr
~wasa
Gast


Tagchen!

okay habe das mir so geändert. Im prinzip nur copy and paste.
Bei mir werden aber ständig fehler angezeigt.

C++:
    for(n=0;n<16;n++)
            printf("%02x ",buffer[n]);


        buffer1[0]=buffer[0]&15;

        for(n=0;n<8;n++)
            buffer1[1+n]=((buffer[2*n+1]&15)<<4)|(buffer[2*n+2]&15);
    
    for(n=0;n<8;n++)
            printf("%02x ",buffer1[n]);
// Bei diesem Funktionsaufruf Fehlermeldung "Ausdruck ergibt keine Funktion
        s_Eintrag.Format("%i%i%i%i\n",digit(buffer1[1]),digit(buffer1[2]),digit(buffer1[3]),digit(buffer1[4]));
        ListenEintrag(s_Eintrag);

    if ((buffer1[3]&0x7f)==0x68)
    {
            it=9999999;    
    }
    else
    {
// Bei diesem Funktionsaufruf Fehlermeldung "Ausdruck ergibt keine Funktion
        it=1000.0*digit(buffer1[1])+100.0*digit(buffer1[2])+10*digit(buffer1[3])+1*digit(buffer1[4]);
    }    

        if (buffer1[4]&0x80)
            it=it/10.0;

        if (buffer1[3]&0x80)
            it=it/100.0;

        if (buffer1[2]&0x80)
            it=it/1000.0;
            
        if (buffer1[1]&0x80)
            it=-it;
        
// Bei diesem Funktionsaufruf Fehlermeldung "Ausdruck ergibt keine Funktion
        dvm_unit(buffer1[0], (buffer1[5]<<16)|(buffer1[6]<<8)|buffer1[7],units);



THX wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
21.07.2004, 14:34 Uhr
ao

(Operator)


Zeig mal deine Definitionen von digit und dvm_unit.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
21.07.2004, 15:51 Uhr
~wasa
Gast


tagchen!"

sorry das ich nerven muss!
Vielleicht sollte ich erwähnen das ich Anfänger bin!

So ist der Funktionsaufbau
int digit(int x)
{}
char *dvm_unit(int y, int x, char *s)
{}
ist da nicht eigentlich schon digit und dvm_unit definiert?

Habe dann noch versucht in meiner DLG klasse dieses zu definieren. Aber das selbe
THX wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
21.07.2004, 16:04 Uhr
ao

(Operator)


Scheint so, als ob dein Compiler nicht schnallt, dass digit und dvm_unit Funktionen sind, er hält es für irgendwas anderes.

Du hast nicht zufällig irgendwo Variablen oder Konstanten definiert, die digit und dvm_unit heißen?

Poste mal die Fehlernummer, die das Visual Studio auswirft (die vierstellige Zahl mit dem C davor); ich hab hier ein englisches VS und kann die eingedeutschten Fehlertexte nicht so eindeutig zuordnen, aber mit der Nummer müsste es gehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
21.07.2004, 17:31 Uhr
~wasa
Gast


Tagchen!

Variablen oder konstanten habe ich nicht so definiert.
hier nun der Fehlercode:
C2064
Vielen Dank!!
THX
wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
23.07.2004, 10:56 Uhr
~wasa
Gast


Tagchen!

Es wird doch bestimmt noch was einfacheres geben als den Quellcode da oben, oder??
kann man das nicht einfacher machen, wenn man weiß wie man an die einzelnen BITS rankommt??
Das wäre nämlich meine Frage: Wie komme ich an die einzelnen Bits??
DANKE SCHONMAL!!!
Achso AO: Was ist eigentlich bei der Fehlermeldung herausgekommen?? C2064

VIELEN DANK!!! cu wasa
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
23.07.2004, 11:18 Uhr
ao

(Operator)


Man sollte das übersichtlicher schreiben und anstelle von hart einkodierten Zahlenwerten symbolische Konstanten verwenden; so wie es jetzt ist ist es nämlich 1. schwer lesbar und 2. schwer verständlich, und das bedeutet praktisch unpflegbar. So was ist ganz schlecht.

Aber der Weg, mit Bit-Operationen an einzelne Bitstellen heranzukommen, ist schon der in C und C++ übliche. Nimm dir ein C-Buch und lies das Kapitel über Operatoren.

Die Fehlermeldung: Wie ich schon vermutet habe, der Compiler sieht nicht, dass digit und dvm_unit Funktionen sind, die er aufrufen kann. Er sieht stattdessen etwas anderes. Was, kann ich nicht sagen. Hast du irgendwo Prototypen für diese Funktionen geschrieben? Wie sehen die aus?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: