Ich habe eine Routine, in der ich swprintf aufrufen. Aus der ganzen Dokumentation, die ich gefunden habe, soll es wie sprintf funktionieren, nur mit Unicode-Strings. Der CodeVisual C++ - Betrieb von swprintf
swprintf(buffer, wcslen(buffer), L"COM %d", i);
entfernt die Anzahl der Buchstaben, die von i bestimmt werden. Wenn i = 0 Puffer = "COM0"; wenn i = 1, Puffer = "COM"; Wenn i = 2, Puffer = "CO" - usw.
Hat jemand eine Erklärung ??? Der vollständige Code ist unten gezeigt
void SelectComPort() //added function to find the present serial
{
wchar_t lpTargetPath[5000]; // buffer to store the path of the COMPORTS
wchar_t buffer[20];
DWORD test;
bool gotPort=0; // in case the port is not found
size_t size = 0;
for(int i=0; i<255; i++) // checking ports from COM0 to COM255
{
swprintf(buffer, wcslen(buffer), L"COM %d", i);
test = QueryDosDevice(buffer, &lpTargetPath[size], 5000);
// Test the return value and error if any
if(test != 0) //QueryDosDevice returns zero if it didn't find an object
{
size = wcslen(lpTargetPath);
gotPort=1; // found port
}
if(::GetLastError()==ERROR_INSUFFICIENT_BUFFER)
{
lpTargetPath[10000]; // in case the buffer got filled, increase size of the buffer.
continue;
}
}
return;
}
'wcslen' gibt die Länge der * Zeichenkette * zurück, nicht die Länge des * Puffers *. Versuchen Sie 'swprintf (Puffer, 20, ...)' –