Цитата(*antzol* @ Dec 17 2008, 21:48)

Работаю в билдере, открываю примерно так:
Код
AnsiString PortName;
...
PortName = "COM23";
...
port = CreateFile(PortName.c_str(),
GENERIC_READ | GENERIC_WRITE, 0,
NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
Ну не знаю. Может, билдер сильно умный

.
Но вот текст завалялся, примерчик человеку делал по зажиганию светодиодов:
Код
#include <windows.h>
#include <stdio.h>
int main(int ac, char **av)
{
int key;
HANDLE hCom;
if( ac < 2) {
printf( "Use: test COMNAME\n");
return 1;
}
hCom = CreateFile( av[1], GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if( hCom == INVALID_HANDLE_VALUE ) {
printf( "Can't open %s", av[1]);
return 1;
}
printf( "use r/R, d/D, b/B keys for clear/set RTS, DTR and BREAK state, q for quit (press CR after key)\n");
while( (key = getchar()) != 'q' ) {
switch(key) {
case 'D': EscapeCommFunction( hCom, SETDTR); break;
case 'd': EscapeCommFunction( hCom, CLRDTR); break;
case 'R': EscapeCommFunction( hCom, SETRTS); break;
case 'r': EscapeCommFunction( hCom, CLRRTS); break;
case 'B': SetCommBreak( hCom); break;
case 'b': ClearCommBreak( hCom); break;
}
}
CloseHandle(hCom);
return 0;
}
И вона скиншоты наличных COM-портов и вызовов теста с разными параметрами (com5 берёт, значит, дело в количестве цифр).
Кстати, прямые слеши в путях ("//./com22") тоже работают довольно давно, но не везде (в fopen() работают, в командной строке в dir - нет, оно буквы после / как ключи воспринимает), поэтому я лучше уж напишу с С-шной строке \\ для передачи каждого '\', и не буду путаться.
upd:
распаковал из архива BC++ 5.02, скомпилировал приведенній выше текст, результаты прогона совпадают 1:1