ExpandEnvironmentStrings Nicht Die Erweiterung Meiner Variablen
Habe ich einen Prozess im Rahmen des Run-Schlüssels in der registry. Es wird versucht, den Zugriff auf eine Umgebungsvariable, die ich definiert habe, in einer früheren Sitzung. Ich bin mit ExpandEnvironmentStrings erweitern Sie die variable in einem Pfad. Die Umgebungsvariable ist ein Benutzer-Profil variabel. Wenn ich meinen Prozess auf der Kommandozeile ist es nicht zu erweitern als auch. Wenn ich rufe 'set' ich kann sehen, dass die variable.
Code...
CString strPath = "\\\\server\\%share%"
TCHAR cOutputPath[32000];
DWORD result = ExpandEnvironmentStrings((LPSTR)&strPath, (LPSTR)&cOutputPath, _tcslen(strPath) + 1);
if ( !result )
{
int lastError = GetLastError();
pLog->Log(_T( "Failed to expand environment strings. GetLastError=%d"),1, lastError);
}
Wenn die debugging-Ausgabe-Pfad ist genau der gleiche wie Weg. Kein Fehlercode zurückgegeben.
Was ist goin auf?
- Ich denke, dass
strPath == Path
undcOutputPath == OutputPath
, aber ein bisschen Bereinigung helfen würde. - Poste bitte gültigen code. Definieren Sie die variable
strPath
undcOutputPath
und dann Variablen verwendenPath
undOutputPath
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein problem ist, dass Sie die falschen Parameter zu
ExpandEnvironmentStrings
und dann mit einem cast zu verbergen, die Tatsache, (obwohl Sie tun müssen, ein cast auf den richtigen Typ aus einemCString
).Kommen Sie auch mit den falschen Wert für den letzten parameter. Das sollte die Größe des Ausgabe-Puffers, nicht die Größe der input Länge (vom Dokumentation
the maximum number of characters that can be stored in the buffer pointed to by the lpDst parameter
)Setzen, dass es insgesamt, die Sie wollen:
Sehe ich keine error-checking code in das snippet, den Sie nicht geltend machen, der return-Wert. Wenn es ein problem gibt, würde Sie nie entdecken. Auch Sie sind mit ANSI-Zeichenfolgen, hüten Sie sich vor der weirdo Anforderung für das argument nSize (1 extra).
Was
buffersize
? Ist es initialisiert - auf den richtigen Wert ?Die Dokumentation besagt, dass
If the destination buffer is too small to hold the expanded string, the return value is the required buffer size, in characters.