Zum Inhalt springen

Manfred.Becker

Mitglieder
  • Gesamte Inhalte

    148
  • Benutzer seit

  • Letzter Besuch

Beiträge von Manfred.Becker

  1. Hi jasso,

    arbeitest du mit einer sehr niedrigen Baudrate?

    Es scheint, als ob nicht schnell genug Daten am Port ankommen.

    Mein letzter Tip wäre in der Do-While-Schleife vor DoEvents ein call Sleep(10) einzubauen.

    Dadurch wird 10 ms gewartet, bevor der InBuffer erneut geprüft wird.

    Sleep() ist eine API-Funktion, die du so deklarierst:

    Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

  2. das leuchtet mit leider nur teilweise ein.ich brauch ja nicht nur ne ausgabe sondern eine variable, die ich danach weiterverwenden kann. versteh ich das richtig? in diesem fall würde ich doch nur die ausgabe bekommen oder?

    Beziehst du dich auf mein Beispiel?

    Dort wird auch eine Variable (subString) verwendet. Reicht das nicht?

  3. Hi sternchen_1709,

    dein subString ist ein char* !!!!

    Damit kannst du höchstens irgendwohin verweisen. Eine Zeichenkette kannst du damit nicht speichern.

    Wenn es lediglich um die Zeichenfolge ab dem zweiten Zeichen geht, dann darfst du einfach mit dem +Operator drauf zugreifen.

    Benötigst du aber wirklich eine eigene Variable, dann muss das ein char-Array sein, das mit Kopierfunktionen befüllt wird.

    Hier ein paar Beispiele:


    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>

    int main (void)
    {
    const char * name = "1234";
    char subString[80];



    printf("%d\n",atoi(name)); // Ausgabe: 1234
    printf("%d\n",atoi(name+1)); // Ausgabe: 234

    strcpy(subString,name+1);
    printf("%s\n",subString); // Ausgabe 234

    strncpy(subString,name+1,2);
    subString[2]=0; // abschliessendes 0
    printf("%s\n",subString); // Ausgabe 23



    getch();

    return 0;
    }
    [/PHP]

  4. Hi,

    kontrolliere bitte mal dei Eigenschaft InputLen des MSComm-Controls.

    Die muss unbedingt auf 1 gesetzt sein!

    Sollte sie grösser 1 sein z.b. 16, dann werden immer nur Blockweise Daten gelesen. Wenns dann einen Rest gibt, kommt's nicht zum OnComm-Ereignis!

    Hier die abgespeckte OnComm-Funktion:


    Private Sub comm_scanner_OnComm()
    Dim BytesLeft As Integer
    Dim strIn As String
    Dim scannerstring As String


    BytesLeft = comm_scanner.InBufferCount
    scannerstring = ""
    Do While BytesLeft > 0
    strIn = comm_scanner.Input
    scannerstring = scannerstring & strIn
    DoEvents
    BytesLeft = comm_scanner.InBufferCount
    Loop
    logfile.WriteLog scannerstring, ".\scannerstring.txt"
    End Sub
    [/PHP]

  5. Hi jasso,

    ich selbst hatte noch mit keinem Betriebsystem jemals Probleme mit VB6 und der Ser. Schnittstelle!

    Höchstwahrscheinlich ist eine unsaubere Programmierung der OnComm-Funktion die Ursache.

    Hast du daran gedacht, dass während du Daten aus der seriellen Schnittstelle liest, noch weitere Daten hinzukommen können?

    Deshalb sollte die OnComm-Funktion etwa so aussehen:


    Private Sub MSComm1_OnComm()
    Dim ReceiveData(1024) As Integer
    Dim BytesLeft As Integer
    Dim i As Integer
    Dim nBytes As Integer
    Dim ch As Byte
    Dim strIn As String


    nBytes = 0

    BytesLeft = MSComm1.InBufferCount
    Do While BytesLeft > 0
    strIn = MSComm1.Input
    nBytes = nBytes + 1
    If strIn <> "" Then
    ReceiveData(nBytes) = AscB(strIn)
    Else
    ReceiveData(nBytes) = 0
    End If

    DoEvents
    BytesLeft = MSComm1.InBufferCount
    Loop

    ...
    End Sub

    [/PHP]

    Wichtig dabei ist die Do While BytesLeft > 0 Schleife!

    Poste doch mal deine OnComm-Funktion...

  6. Hi bobzta,

    mit mget bekommst du nur die Files aus dem angegebenen Ordner kopiert, nicht aber die aus weiteren Unterordnern!

    Ich glaube dafür gibt's kein spezielles ftp Kommando. Allerdings könntest du es mit dem take-Kommando versuchen:

    take-Kommando:

    Durch die Eingabe von >take datei< werden alle FTP-Kommandos, die in datei vorhanden sind, ausgeführt. Auf diese Weise kann eine Stapelanwendung definiert werden. Dieses Kommando eignet sich insbesondere zur Übertragung mehrerer Dateien, falls der Host keine Mehrfachübertragung durch Platzhalter erlaubt (VSP-Rechner).

    Quelle: ftp-befehle

  7. Hi katz_1,

    was ist denn das für eine Fehlernehandlung (mit GOTO!!!)?

    Das ist mehr als übel!

    Ausserdem musst du in der Fehlerbehandlung mit RESUME arbeiten, um weiterzumachen!

    Hier mal ein Grundgerüst für die Fehlerbehandlung:


    Private Sub MySub()
    On Error GoTo ErrorHandler

    ...

    Step1:
    ...

    Exit Sub

    ErrorHandler:
    Dim ErrNumber, ErrDescription

    ErrNumber = Err.Number
    ErrDescription = Err.Description

    Select Case ErrNumber
    Case ???
    Resume
    Case ???
    Resume Next
    Case ???
    Resume Step1
    Case Else
    MsgBox ErrDescription, , "Fehler " & ErrNumber
    End

    End Select


    End Sub

    [/PHP]

  8. Hi,

    mal abgesehen davon, dass in der Funktion int teil() die Variable argv nicht übergeben wurde, und dann auch noch falsch eingesetzt ist...

    int teil()

    {

    char string1[20];

    sprintf(string1, "Hallo %s", argv[]);

    . . .

    }

    ... und selbst wenn man es richtig macht, ist die Zuweisung mit sprintf() so mehr als kritisch!


    int teil(char* value)
    {
    char string1[20];
    sprintf(string1, "Hallo %s", value);
    . . .
    }
    [/PHP]

    Das funktioniert nämlich nur solange keine Zeichenfolge länger 13 Zeichen eingegeben wurde!!!!

    Ändere das bitte!

  9. Hi,

    das sagt die F1-Hilfe:


    CreateProcess
    The CreateProcess function creates a new process and its primary thread. The new process executes the specified executable file.

    BOOL CreateProcess(
    LPCTSTR lpApplicationName,
    // pointer to name of executable module
    LPTSTR lpCommandLine, // pointer to command line string
    LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes
    LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes
    BOOL bInheritHandles, // handle inheritance flag
    DWORD dwCreationFlags, // creation flags
    LPVOID lpEnvironment, // pointer to new environment block
    LPCTSTR lpCurrentDirectory, // pointer to current directory name
    LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
    LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
    );
    [/PHP]

    Der Inhalt von lpCommandLine ist typischerweise:

    "test.exe"

    "c:\\program files\\test.exe"

    ".\\weiterer ordner\\test.exe"

  10. alles perfekt!

    Das mit dem Starten funktioniert allerdings auch nur dann, wenn du die im Programmers Notepad die Datei geöffnet hast, die vom Namen her genauso heist wie die exe!

    Bsp: Modul "Hello.cpp"

    EXE-Datei: "HELLO.EXE"

    Und die Exe Datei muss sich im gleichen Verzeichnis befinden wie das Modul.

    Wenns jetzt immer noch nicht geht, dann weis ich auch nicht weiter! :(

    (PS.: Ich hab die Version 2.05.48)

  11. Oh, jetzt bin ich wohl zu spät dran. :beagolisc

    Aber das hier hatte ich gerade fertig:


    Const ANZVALUES = 6

    Private Sub CommandButton1_Click()
    Dim rowIndex%, colIndex%, index%, i%
    Dim itemName$
    Dim zufall%
    Dim zArray(ANZVALUES) As Integer

    rowIndex = 1 'Startzeile (bitte anpassen!)'
    colIndex = 2 'Startreihe (bitte anpassen!)'
    Randomize Timer

    For i = 0 To ANZVALUES - 1
    zArray(i) = -1 'Werte initialisieren'
    Next i

    For index = 0 To ANZVALUES - 1
    Do
    zufall = Rnd(1) * 5 'Zufallswerte 0 bis 5'
    For i = 0 To ANZVALUES - 1
    If zufall = zArray(i) Then
    zufall = -1
    Exit For
    End If
    Next i
    Loop While zufall < 0
    zArray(index) = zufall 'Zufallswert merken'

    itemName = "TextBox" & index + 1
    UserForm1.Controls.Item(itemName).Text = Tabelle1.Cells(rowIndex + zufall, colIndex)
    Next index
    End Sub
    [/PHP]

    vielleicht bringt's ja noch was...

  12. nein brauchst du nicht!

    bei mir tut's doch auch. Hast du bei der Option

    Console I/O: Capture output

    auch wirklich den Haken rausgenommen, wie ich empfohlen hatte? Solange dort ein Haken sitzt, gibts auch keine Ausgabe!

    Und verwendest du die Version 2? Nur mit der funktionierts.

    Übrigens setze mal in der DOS-Box 'nen cmd Befehl ab. Was passiert?

    Augenscheinlich nichts. Aber in Wahrheit wird ein weiterer cmd-Prozess im Hintergrund gestartet (siehe Task Manager). Und du must zweimal exit eingeben, um die DOS-Box zu verlassen.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...