1

コンソール アプリケーションの初心者です。Web アプリケーションからコンソール アプリケーションに 2 つのコマンド ライン引数を渡し、コンソール アプリケーションから返された結果を取得する必要があります。

ここで私は私たちで試しました

 Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim proc = New Process() With { _
        .StartInfo = New ProcessStartInfo() With { _
        .FileName = "C:\Users\Arun\Documents\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe", _
        .Arguments = TextBox1.Text & " " & TextBox2.Text, _
        .UseShellExecute = False, _
        .RedirectStandardOutput = True, _
        .CreateNoWindow = True _
        } _
   }

        proc.Start()

        proc.WaitForExit()
        Response.Write(proc.ExitCode.ToString())


    End Sub

私のコンソールアプリケーションコードは

Public Function Main(sArgs As String()) As Integer


        Return sArgs(0)


    End Function

しかし、コンソール アプリから戻り値を取得できません。だれかが助けてくれる問題は何ですか?

4

2 に答える 2

2

これは、パラメーターが VB.NET コンソール プログラムに渡される方法ではありません (ここで確認できるように)。

例:

Module Module1

    Sub Main()
        For Each arg As String In My.Application.CommandLineArgs
            Console.WriteLine(arg)
        Next
    End Sub

End Module

上記のコードだけで構成されるコンソール プロジェクト EXE (app.exe) を生成し、(cmd から) 次のように呼び出すと、画面[full_path]app 1 2に出力1 2されます。

したがって、あなたがしなければならないことは、 から引数を取得することだけですMy.Application.CommandLineArgs

-------- 正確な要件がよりよく説明された後に更新

その下.Argumentsには、コンソール アプリケーションに渡したい引数だけを配置する必要があります。

単純な一時ファイルに依存することで、呼び出しプログラムに複数の整数を返すことができます。例えば:

コンソール プログラム:

Dim writer As New System.IO.StreamWriter("temp")

writer.Write("anything")
writer.Close()

プログラムの呼び出し:

Dim reader As New System.IO.StreamReader("temp")
Dim line As String
Do
    line = sr.ReadLine() 'reading anything passed from the console
Loop Until line Is Nothing
reader.Close()

Try
   System.IO.File.Delete("temp")
Catch ex As Exception

End Try
于 2013-07-02T09:23:12.353 に答える
2

2 つの個別の引数をネイティブに返すことはできません。32 ビットの符号付き整数に制限されています。

これを行う唯一の方法は、2 つの数値がそれぞれ 16 ビット未満であることを保証できる場合、そのうちの 1 つをビット シフトすることにより、これらを 1 つの 32 ビット値に結合することです。

このコードで開始できます。

Public Shared Function CombineValues(val1 As Int16, val2 As Int16) As Int32
    Return val1 + (CInt(val2) << 16)
End Function

Public Shared Sub ExtractValues(code As Int32, ByRef val1 As Int16, ByRef val2 As Int16)
    val2 = CShort(code >> 16)
    val1 = CShort(code - (CInt(val2) << 16))
End Sub

使用法 (コンソール):

    'in your console app combine two int16 values into one Int32 to use as the exit code
    Dim exitCode As Int32 = CombineValues(100, 275)
    Debug.WriteLine(exitCode) 'Output: 18022500

使用法 (呼び出しコード):

    'In the calling app split the exit code back into the original values
    Dim arg1 As Int16
    Dim arg2 As Int16
    ExtractValues(exitCode, arg1, arg2)

    Debug.WriteLine(arg1.ToString + "; " + arg2.ToString) 'Output: 100; 275
于 2013-07-02T10:10:56.557 に答える