На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: SCINER, B.V.
  
    > Как отпарсить командную строку , CommandLineToArgvW
      Вам никогда не приходило в голову написать свой парсер командной строки?
      Который бы разбирал что-то типа
      ExpandedWrap disabled
        a b "x\"x" 555
      Если приходилось то вы знаете, как это "приятно".
      Однако, в windows уже есть функция, которое все распарсит сама.
      ExpandedWrap disabled
        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

      Использование:
      ExpandedWrap disabled
        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
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0147 ]   [ 16 queries used ]   [ Generated: 27.04.24, 21:43 GMT ]