MDE String lesen (c/c++)

d0x

Cadet
Mitglied seit
14.05.2005
Beiträge
30
Renomée
0
Hallo,
ich hab folgendes Problem. Mein chef fragte mich gerade ob ich morgen für ein MDE Gerät (Barcodescanner) einen C Code schreiben könnte (hier in der Firma wird nicht in C programmiert). Ich dachte erst es sei auf dem MDE Gerät Windows CE drauf. Leider ist das nicht der fall. Mein Chef weiss selber nicht genau wie das teil läuft. Ich bekomme es auch erst morgen. Er meinte das es über dos läuft. Ich vermute einfach mal das es mir einen String über die Seriale schnittstelle sendet. Ich wüsste mal gerne ob von euch einer schonmal eine anwendung für diese art von Gerät geschrieben hat. Und habt ihr einen Beispielcode oder eine erklärung wie man Daten über Com1 empfängt? Er meinte ich soll die daten auch speichern, aber das bekomm ich alles selber hin.

Dann hätte ich auch noch ne frage ob ich die bibliotheken
iostream.h
fstream.h
conio.h
verwenden kann, oder ob sie irgendwie an windows gebunden sind.

Ich hab gerade mal gegoogelt und solche mde geräte hier gefunden:
http://www.barcode-scanner.ch/shop/de-ch/dept_18.html
da steht ja "frei programmierbar in C und Basic". Meint ihr die haben eigene Bibliotheken?

Danke im vorraus,
d0x
 
Puh, also unter Linux wäre das ein einfaches cat /dev/ttyS[x], und oh Wunder über Wunder, bei DOS (und nur da ;D) ist es nicht viel schwieriger.

DOS kennt ein paar spezielle Gerätenamen, ähnlich wie /dev bei Linux (nur eben viel viel viel weniger und statisch benannt). Dazu gehört CON, LTP1, LTP2 (afaik), und soweit ich mich erinnere auch COM1 und COM2.

Ein type xyz > COM1 würde also zB. den Inhalt der Datei xyz auf COM1 ausgeben. Ich kann dir allerdings nur das Buch "PC Intern 4" ans Herz legen, da findest du alles, was du brauchst.
 
<OffTopic>
i_hasser schrieb:
aus diesem Posting

Puh, also unter Linux wäre das ein einfaches cat /dev/ttyS[x], und oh Wunder über Wunder, bei DOS (und nur da ;D) ist es nicht viel schwieriger.

DOS kennt ein paar spezielle Gerätenamen, ähnlich wie /dev bei Linux.
Kleiner Hinweis: Windows kennt die auch. Beispiele:
CreateFile("\\.\PHYSICALDRIVE2")
CreateFile("COM1")
CreateFile("LPT1")
CreateFile("\\.\CDROM0")
...
CreateFile liefert ein Handle auf das jeweilige Gerät. Mit diesem Handle kann man auf das Gerät wie auf eine Datei zugreifen.
</OffTopic>
 
ok, hab das teil jetzt hier vor mir.
es läuft mit MS Dos ROM 3.22 Kernel.
hab jetzt bestimmt 2 stunden einen 16Bit compiler für ein 80386 prozessorgesucht. Hab dann auch einen gefunden ( Digital Mars C/C++ ). Ist aber richtig schwer das ganze immer zu fuß über dos zu machen. kann mir zwar ne bat datei schreiben und mit umgebungsvariablen arbeiten, aber irgendwie ist das nicht das wahre wenn man den borland builder *duck* gewöhnt ist. Habt ihr ne ahnung wie ich den Compiler in Dev-Cpp einbinde oder habt ihr sonst ein Tool mit Editor und bereitgestelltem Compiler und Debugger?
 
Geh mal auf die Borland Seite, Turbo C 3.03 und C++ 1.x ist kostenlos. Sind sowieso mit die besten für Dos.
 
Hab mir jetzt das Turbo C geladen. Das is ja mal richtig hart (komme mir vor wie bei assembler *g*). Aber ich glaub wenn ich mich daran gewöhnt hab is das um einiges schneller. Nur beim C&P muss ich mich da verdammt umstellen. Hast du ne Ahnung wie ich die iostream.h einbinde? würde ganz gerne cout und cin verwenden. Mir is printf net so geläufig. Falls nicht sag mir mal bitte mit welchem befehl ich eingeben kann. also einen Cin ersatz.

Danke schonmal,
d0x
 
Danke, habe gerade den fehler gefunden. Der legt standart mäßig eine *.c datei an. So benutzt er auch nur den normalen standart c compiler. Man muss dem sagen das er den c++ compiler benutzen soll. Jetzt nur noch hoffen das es auch mit dem mde so läuft.
 
Hab mal ne fragezu dem CreateFile. Also ich hab eben mit Cut n Paste mir so n quelltext zusammen geschnitten. Ich komm leider net ganz mit dem ReadFile zurecht. undzwar genau mit "LPOVERLAPPED lpOverlapped". Kann mal einer von euch schauen was damit gemeint ist?
hier die links zu der MSDN Libray. Ich verstehs net
CreateFile:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/createfile.asp
ReadFile:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/readfile.asp


PHP:
#include <conio.h>
#include <windows.h>
#include <stdio.h>

int main()
{
   HANDLE hFile;

   hFile = CreateFile(TEXT("c:\\COM1"),    // file to open
                      GENERIC_READ,          // open for reading
                      FILE_SHARE_READ,       // share for reading
                      NULL,                  // default security
                      OPEN_EXISTING,         // existing file only
                      FILE_FLAG_OVERLAPPED, // normal file
                      NULL);                 // no attr. template

   if (hFile == INVALID_HANDLE_VALUE)
   {
       printf("Could not open file (error %d)\n", GetLastError());
       return 0;
   }



   char inBuffer[100];
   DWORD nBytesToRead=100;
   LPDWORD nBytesRead;

// Attempt a synchronous read operation.
   bool bResult = ReadFile(hFile,
                          &inBuffer,
                          nBytesToRead,
                          &nBytesRead,
                          NULL);   //<- hier motzt er. Aber ich versteh das mit dem
                                   //   overplapped net.


   getch();
   return 0;
}
 
Motzt der Compiler? Eigentlich müsste der Aufruf richtig sein. Du solltest allerdings das FILE_FLAG_OVERLAPPED bei CreateFile() durch 0 ersetzen, denn FILE_FLAG_OVERLAPPED heißt, dass Du asynchron auf die Datei zugreifen willst, was Du ja offenbar nicht vorhast.
 
Zurück
Oben Unten