2011-01-11 21 views
6

Sto cercando una funzione in VB6 (o alcuni WinAPI) che potrebbe essere in grado di soddisfare questo requisito: Prendere una stringa di percorso di input che include variabili di ambiente e generare quel percorso con le variabili di ambiente risolte .ResolvePath per VB6 - risoluzione delle variabili di ambiente

Ad esempio:

  • ingresso: "%windir%\System32\"
  • uscita: "C:\Windows\System32\"

Potrei ovviamente scrivere il mio parser, ma mi chiedo se questa funzionalità esiste già?

Questo sarebbe simile allo Spring Framework's "ResolvePath" method.

risposta

4

caso peggiore che si può utilizzare l'applicazione nativa: ExpandEnvironmentStrings

+2

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

-1

Utilizzando l'usato raramente Environ() Funzione: http://vbcity.com/forums/t/45987.aspx

+1

Ya, che funzionerebbe se avessi scritto il mio parser. Mi chiedo se il parser esiste già da qualche parte. Dir() ha 101 usi diversi, e forse il winapi ne ha uno. – csauve

6

Kernel32.dll esporta una funzione chiamata ExpandEnvironmentStrings:

mio VB6 è arrugginito, ma puoi chiamare questo facendo:

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

Quindi in una funzione o sub:

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

Non è giusto, è necessario allocare spazio per strOutput prima di chiamare 'ExpandEnvironmentStrings'. Si potrebbe fare 'result = 0: result = ExpandEnvironmentStrings (strInput, strOutput, result): strOutput = Spazio $ (risultato): result = ExpandEnvironmentStrings (strInput, strOutput, result)' – MarkJ

+0

@MarkJ - grazie per averlo capito. Non ho ancora installato VB6 ma posso vedere la vecchia scatola di CD di Visual Studio 6 del 1999 su uno scaffale da qui :) – Kev

+0

+1 Che ora funziona in VB6 sulla mia macchina. +1 per mantenere anche i dischi :) – MarkJ

Problemi correlati