Öffnen Sie eine Steckdose mit Create
-
21-08-2019 - |
Frage
Wir haben einige alte Serien Code bekam, die eine serielle Schnittstelle überprüft, ob durch einfaches Öffnen und dann Schließen es verfügbar ist. Nun fügen wir Netzwerk-Support für die App Ich mag die Funktion verwenden, indem die IP-Adresse als String zu liefern.
/**
* So far I have tried:
* A passed in portPath normally looks like:
\\?\acpi#pnp0501#1#1#{GUID}
10.2.0.155:2001
//10.2.0.155:2001/
\\.\10.2.0.155:2001\
\\?\10.2.0.155:2001\
* all without success.
*/
bool PortIsAvailable( const CString& portPath )
{
HANDLE hCom = ::CreateFile( portPath,
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened with exclusive-access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
FILE_FLAG_OVERLAPPED, // not overlapped I/O
NULL ); // hTemplate must be NULL for comm devices
if (INVALID_HANDLE_VALUE != hCom )
{
::CloseHandle( hCom );
return true;
}
return false;
}
Ich weiß, dass ich durch Abschaltung gefolgt connect verwenden könnte, aber ich möchte die Funktion mit minimalen Änderungen wiederzuverwenden. Wenn ich die Funktion wieder verwenden um so besser. Wenn nicht, dann werde ich Code schreiben, der bestimmt, ob es sich um eine Buchse ist oder nicht.
Ich habe mich gefragt, was die richtige Art und Weise eine Buchse über Create der Öffnung ist?
Lösung
Sie können keine Steckdose über Createfile erstellen. Sie sollten die Fenster verwenden Socket-API für diese Zweck. Für den Sockel Griff zu erstellen, verwenden Sie WSASocket . Beachten Sie, dass die Buchse von dieser Funktion zurück können verwendet werden, wie Windows mit einigem Griff Windows-Funktionen, wie Readfile und Writefile .
Andere Tipps
Ich glaube nicht, dass Sie Steckdosen mit CreateFile()
manipulieren können. Sockets ist eine Abstraktion von BSD importiert (IIRC) und in einer Namen-kompatible Art und Weise implementiert (ursprünglich über winsock.h
und winsock2.h
zur Zeit). Ich glaube nicht, MS jemals Unterstützung für Sockets CreateFile()
hinzugefügt.
Weitere Gründe: Die meisten (? Alles) CreateFile()
manipuliert gibt einen nativen Windows-Handle. Da Steckdosen eine nicht-native Abstraktion sind, dass sie nicht über eine native Griff in dem O haben, so wäre es nicht sinnvoll, für CreateFile()
sich zu behandeln.