2011-01-11 6 views
6

この要件を満たすことができるVB6(または何らかのWinAPI)の関数を探しています。環境変数を含む入力パス文字列を取り、そのパスを環境変数で解決する。例えばResolvePath for VB6 - 解決する環境変数

  • 入力:"%windir%\System32\"
  • 出力:"C:\Windows\System32\"

私は、もちろん私自身のパーサーを書くことができますが、この機能はすでに存在している場合、私は疑問に思って?

これは、Spring Framework's "ResolvePath" methodに似ています。

答えて

4

最悪のケースを:ExpandEnvironmentStrings

+2

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

-1

ほとんど使用ENVIRON()関数の使い方:あなたはネイティブ実装を使用することができますhttp://vbcity.com/forums/t/45987.aspx

+1

私は自分のパーサーを書いてもうまくいくでしょう。パーサがすでにどこかに存在するかどうかは疑問だ。 Dir()には101の異なる用途があり、おそらくwinapiには1つの用途があります。 – csauve

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) 
+0

正しくない場合は、strOutputにスペースを割り当てて呼び出す必要があります'ExpandEnvironmentStrings'。あなたは 'result = 0:result = ExpandEnvironmentStrings(strInput、strOutput、result)を実行できます:strOutput = Space $(result):result = ExpandEnvironmentStrings(strInput、strOutput、result)' – MarkJ

+0

@MarkJ - これをキャッチすることに感謝します。私はVB6はもうインストールされていませんが、1999年のCDの古いVisual Studio 6ボックスがここからの棚に表示されます:) – Kev

+0

+1これは私のマシン上のVB6で動作します。 +1もディスクを保つために:) – MarkJ