воскресенье, 14 января 2007 г.

[ Visual Basic ] Как отпарсить командную строку,CommandLineToArgvW

Вам никогда не приходило в голову написать свой парсер командной строки?
Который бы разбирал что-то типа

a b "x\"x" 555

Если приходилось то вы знаете, как это "приятно".
Однако, в windows уже есть функция, которое все распарсит сама.


Option Explicit
Private Declare Function CommandLineToArgvW Lib "shell32.dll" (ByVal nInput As Long, ByRef retcount As Long) As Long
Private Declare Function LocalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function SysAllocString Lib "oleaut32" (ByVal nString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

Public Function CommandLineToArgvVB(ByVal nInput As String) As String()
Dim ret As Long, retcount As Long, rt() As String, I As Integer, lng As Long
ret = CommandLineToArgvW(StrPtr(nInput), retcount)
If retcount > 0 Then
ReDim rt(retcount - 1)
For I = 0 To UBound(rt)
CopyMemory VarPtr(lng), ret + I * 4, 4
CopyMemory VarPtr(rt(I)), VarPtr(SysAllocString(lng)), 4
Next
CommandLineToArgvVB = rt
End If
If ret <> 0 Then LocalFree ret
End Function


Использование:


Private Sub Form_Load()
Dim ret() As String, I As Long
ret = CommandLineToArgvVB("a b ""xx yy"" \""abc")
MsgBox Join(ret, vbCrLf)
End
End Sub

2 комментария:

Анонимный комментирует...

с празником!

Анонимный комментирует...

После вселенской катастрофы Америка превратилась в мертвую пустыню. По бескрайним дорогам, кишащим бандами, с враждой поражденной войной за воду и еду, ищет престаниище безстрашный Илай. Однажды он попадает в мрачные земли, где когда-то была цветущая Калифорния, а теперь это сущий ад, где бесчинствует тиран Карнеги.
смотреть бесплатно онлайн книга илая