005
31.05.2007, 07:19 Uhr
dozent
|
Ich habe mittlerweile rausgefunden, dass mein Programm auf WinXp problemmlos läuft. Nur Win98, WinME und Win2000(mit eingeschränkten Rechten, da Arbeitsrechner) machen Probleme. Dabei ist Win98 und ME eher uninteressant. Hier ist mein Code:
Der Konstruktor:
C++: |
fastcall THauptfenster::THauptfenster(TComponent* Owner) : TForm(Owner) { PortOpen=false; SearchPorts(); // Hier hört der Spass schon auf
}
|
Die Open-Port-Methode
C++: |
bool THauptfenster::OpenPort(char* port) { try{ comm=CreateFile(port, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE, NULL ); } catch(...){return false;}; if(GetLastError()) return false;
PortOpen=true; return true; }
|
Die Set-Methode
C++: |
void THauptfenster::SetSerial() { // Geschwindigkeit etc. einstellen
GetCommState(comm,&OriginalDCB); // Original einstellungen speichern MyDCB.DCBlength=sizeof(DCB); MyDCB.BaudRate=9600; MyDCB.ByteSize=8; MyDCB.Parity=NOPARITY; MyDCB.StopBits=ONESTOPBIT; SetCommState(comm,&MyDCB);// setzen der Daten }
|
und jetzt die SearchPort()
C++: |
void THauptfenster::SearchPorts() { AnsiString alt; if (CBPort->Items->Count)alt=CBPort->Text; CBPort->Clear();// Liste leeren if (PortOpen) CloseSerial();
// Vorhandene Ports suchen AnsiString Port="COM";
for (int i=0;i<20;i++) { Port="COM"+IntToStr(i); if ( OpenPort(Port.c_str()) ) { CBPort->Items->Add(Port); CloseSerial(); } }
if (CBPort->Items->Count) { int pos=CBPort->Items->IndexOf(alt); if (pos<0) pos=0; CBPort->ItemIndex=pos; ChangePort(); } else { Fehler("Kein COM-Port gefunden!"); Close(); } }
|
Liebe Kollegen, Ideen? |