2011-01-11 17 views
6

Estoy buscando una función en VB6 (o algún WinAPI) que pueda satisfacer este requisito: tomar una cadena de ruta de entrada que incluya variables de entorno y generar esa ruta con variables de entorno resueltas .ResolvePath para VB6 - resolver variables de entorno

Por ejemplo:

  • de entrada: "%windir%\System32\"
  • Salida: "C:\Windows\System32\"

por supuesto que podría escribir mi propio analizador, pero estoy preguntando si esta funcionalidad ya existe?

Esto sería similar al Spring Framework's "ResolvePath" method.

Respuesta

4

peor de los casos se puede utilizar la aplicación nativa: ExpandEnvironmentStrings

+2

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

-1

Utilizando el Environ() Función rara vez se utilizan: http://vbcity.com/forums/t/45987.aspx

+1

Ya, eso funcionaría si escribiera mi propio analizador. Me pregunto si el analizador ya existe en alguna parte. Dir() tiene 101 usos diferentes, y tal vez el winapi tiene uno. – csauve

6

Kernel32.dll exporta una función llamada ExpandEnvironmentStrings:

Mi VB6 es oxidado pero Puede llamar esto haciendo:

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

Luego en una función 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

No del todo bien, necesitará asignar un espacio para strOutput antes de llamar 'ExpandEnvironmentStrings'. Podría hacer 'result = 0: result = ExpandEnvironmentStrings (strInput, strOutput, result): strOutput = Space $ (result): result = ExpandEnvironmentStrings (strInput, strOutput, result)' – MarkJ

+0

@MarkJ - gracias por captar eso. No tengo VB6 instalado más, aunque puedo ver la antigua caja de CD de Visual Studio 6 desde 1999 en un estante desde aquí :) – Kev

+0

+1 Eso ahora funciona en VB6 en mi máquina. +1 para mantener los discos también :) – MarkJ

Cuestiones relacionadas