2011-01-11 4 views
6

Ich bin auf der Suche nach einer Funktion in VB6 (oder einigen WinAPI), die diese Anforderung erfüllen könnte: Nehmen Sie eine Eingabe Pfadzeichenfolge, die Umgebungsvariablen enthält und geben diesen Pfad mit aufgelösten Umgebungsvariablen .ResolvePath für VB6 - Auflösung von Umgebungsvariablen

Zum Beispiel:

  • Eingang: "%windir%\System32\"
  • Ausgang: "C:\Windows\System32\"

Ich könnte natürlich meinen eigenen Parser schreiben, aber ich frage mich, ob diese Funktionalität bereits vorhanden ist?

Dies wäre ähnlich wie die Spring Framework's "ResolvePath" method.

Antwort

4

Schlimmster Fall, dass Sie die native Implementierung verwenden können: ExpandEnvironmentStrings

+2

Oder in .NET Environment.ExpandEnvironmentVariables: http://msdn.microsoft.com/en-us/library/system.environment.expandenvironmentvariables.aspx –

-1

Mit der selten verwendeten Environ() Funktion: http://vbcity.com/forums/t/45987.aspx

+1

Ya, das würde funktionieren, wenn ich meinen eigenen Parser schrieb. Ich frage mich, ob der Parser schon irgendwo existiert. Dir() hat 101 verschiedene Nutzungen, und vielleicht hat der Winapi einen. – csauve

6

Kernel32.dll exportiert eine Funktion ExpandEnvironmentStrings genannt:

Mein VB6 ist rostig, aber Sie können dies folgendermaßen tun:

Declare Function ExpandEnvironmentStrings _ 
    Lib "kernel32" Alias "ExpandEnvironmentStringsA" _ 
    (ByVal lpSrc As String, ByVal lpDst As String, _ 
    ByVal nSize As Long) As Long 

Dann in einer Funktion oder Unter:

Dim result as Long 
Dim strInput As String, strOutput As String 
'' Two calls required, one to get expansion buffer length first then do expansion 
result = ExpandEnvironmentStrings(strInput, strOutput, result) 
strOutput = Space$(result) 
result = ExpandEnvironmentStrings(strInput, strOutput, result) 
+0

Nicht ganz richtig, müssen Sie einige Speicherplatz für StrOutput vor dem Aufruf reservieren 'ExpandEnvironmentStrings'. Du könntest 'result = 0: result = ExpandEnvironmentStrings (strInput, strOutput, result): strOutput = Leerzeichen $ (result): result = ExpandEnvironmentStrings (strInput, strOutput, result)' – MarkJ

+0

@MarkJ - danke, dass du das eingefangen hast. Ich habe VB6 nicht mehr installiert, obwohl ich die alte Visual Studio 6 CD-Box von 1999 auf einem Regal von hier sehen kann. – Kev

+0

+1 Das funktioniert jetzt in VB6 auf meinem Rechner. +1 für das Halten der Festplatten auch :) – MarkJ

Verwandte Themen