VB6中的ResolvePath - 解析环境变量

6
我正在寻找一个VB6函数(或一些WinAPI),可以满足以下要求:接收包含环境变量的输入路径字符串,并输出已解析环境变量的路径。
例如:
输入:"%windir%\System32\" 输出:"C:\Windows\System32\" 我当然可以编写自己的解析器,但我想知道这个功能是否已经存在?
这类似于Spring Framework的“ResolvePath”方法
3个回答

6

Kernel32.dll导出了一个名为ExpandEnvironmentStrings的函数:

我的VB6有点生疏,但你可以通过以下方式调用它:

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

然后在一个函数或子程序中:

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)

不太对,你在调用 ExpandEnvironmentStrings 之前需要为 strOutput 分配一些空间。你可以这样做:result = 0: result = ExpandEnvironmentStrings(strInput, strOutput, result): strOutput = Space$(result): result = ExpandEnvironmentStrings(strInput, strOutput, result) - MarkJ
@MarkJ - 谢谢你发现了这个问题。不过我已经没有安装VB6了,虽然我可以从这里看到1999年的旧版Visual Studio 6光盘套装放在书架上 :) - Kev
+1 现在在我的机器上可以在VB6中工作了。保留磁盘也加1分 :) - MarkJ

4

2
在.NET环境中,使用ExpandEnvironmentVariables函数:http://msdn.microsoft.com/zh-cn/library/system.environment.expandenvironmentvariables.aspx - Randy Levy

-1

1
是的,如果我编写自己的解析器,那么这将起作用。我在想是否已经有现成的解析器存在于某个地方。Dir()有101种不同的使用方法,或许winapi有一个解析器。 - csauve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接