CreateFile in VisualStudio2005 Express
-
Hallo zusammen,
hoffe dies ist das korrekte Board für meine Frage.
Nachfolgender Code ist ein Ausschnitt eines laufenden Programm das ich unter
"Pelle C" geschrieben habe.
Aus Kompatibilitätsgründen möchte ich dieses Programm auf VSC++ lauffähig machen.Unter VSC++ scheine ich jedoch irgendetwas zu übersehen.
Habe vorerst die Express-Version2005 und das SDK entsprechend der MS- Anleitung installiert.Das ganze ist als Win32 Consolenprojekt angelegt.
Der Code wird fehlerfrei compiliert. Es wird jedoch immer ein ungültiger Handle
also 0xffff geliefert. Sehe meinen Fehler einfach nicht.Gruss
Jürgen#include "stdafx.h" HANDLE ComHandle; int openComPort(char *port); int main(int argc, char* argv[]) { char port[15]; memset(port,0,sizeof(port)); strcpy_s(port,sizeof(port),"\\\\.\\COM1"); if(openComPort(port)) exit(-1); } int openComPort(char *port) { ComHandle = CreateFile((LPCTSTR) port, GENERIC_READ | GENERIC_WRITE, 0, // exclusive access NULL, // no security attributes OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(ComHandle == INVALID_HANDLE_VALUE) { printf("\nUnable to open < %s >\n\n", port); printf("Press any key to exit."); _getch(); return(-1); } else printf("\nPort < %s > opened \n\n", port); return 0; }
-
Wenn Du casten musst, ist es eigentlich immer sehr verdächtig!!!
Also: Der Grund ist dass bei einem neuen Projekt die Projekteinstellungen auf UNICODE stehen! Somit erwartet "CreateFile" ein UNICODE-String und keinen ANSI-String. Deshalb kam da auch ein Compiler-Fehler (den Du aber schön weggecastet hast
).Also, es gibt die folgenden Lösungen:
- übergib einen UNICODE-String
oder
- verwende "CreateFileA"
oder
- stelle den Zeichensatz von "UNICODE" zurück nach "ANSI / MBCS" (Project|Properties|General|CHaracter Set: "Not Set")PS: Für serielle Kommunikation Rate ich Dir zu fertigen Klassen:
http://www.codeproject.com/system/serial.asp
-
Hallo Jochen,
herzlichen Dank für Deine Antwort. Windows ist für mich leider eine recht unbekannte System-Umgebung
War mir garnicht bewusst das Unicode hier inzwischen der Standard ist. Hätte allerdings auch die Beschreibung zu CreateFile bis zum Ende lesen sollen. Da steht schliesslich das es sowohl CreateFileW(Unicode) als auch CreateFileA(ANSI) gibt.Entsprechende Klassenbibliotheken möchte ich nicht verwenden da wesentliche Codeteile (natürlich kein WinAPI) in einer embedded-Umgebung nur als reiner C-Code verwendet werden. Das macht sonst doppelte Mühe.
Nochmals vielen Dank
Gruss
Jürgen
-
jbr schrieb:
herzlichen Dank für Deine Antwort.
Gern geschehen!
jbr schrieb:
Windows ist für mich leider eine recht unbekannte System-Umgebung
War mir garnicht bewusst das Unicode hier inzwischen der Standard ist.Wer im internationalen Markt bestehen will, der muss Unicode verwenden; alles andere macht gar keinen Sinn. Das ist bei Windows aber schon seit NT so (also über 12 Jahre).