0

VB.net で簡単な例を作成し、コンパイルして実行しました。

Public Class Application
    Sub calc1()
        Dim sq as Integer
        'uncommenting this loop keeps it from compiling for some reason
        'For i as Integer = 1 to 1000
        '   sq = i*i
        'End For
        Console.WriteLine("calculated squares")
    End Sub

    Public Shared Sub Main()
        Dim startTime as DateTime
        Dim endTime as DateTime
        System.Console.WriteLine("Hello world!")
        startTime = Now
        calc1()
        endTime = Now
        Console.WriteLine(endTime.Subtract(startTime).TotalSeconds.ToString("0.0000"))

    End Sub
End Class

正常にコンパイルされますが、実行すると奇妙なエラーが発生します。

Unhandled Exception: System.InvalidProgramException: Invalid IL code in ThreadTest.Application:Main (): IL_0018: ldarg.0   


[ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidProgramException: Invalid IL code in ThreadTest.Application:Main (): IL_0018: ldarg.0   
4

3 に答える 3

4

実行時エラーは、共有関数 (Main) からインスタンス関数 (calc1) を呼び出しているために発生します。

vbnc (Mono の VB コンパイラ) の新しいバージョンでは、次のエラーが表示されます。

test.vb (16,15) : error VBNC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.

この修正されたコードは動作します:

Public Class Application
    Shared Sub calc1()
        Dim sq as Integer
        For i as Integer = 1 to 1000
            sq = i*i
        Next
        Console.WriteLine("calculated squares")
    End Sub

    Public Shared Sub Main()
        Dim startTime as DateTime
        Dim endTime as DateTime
        System.Console.WriteLine("Hello world!")
        startTime = Now
        calc1()
        endTime = Now
        Console.WriteLine(endTime.Subtract(startTime).TotalSeconds.ToString("0.0000"))
    End Sub
End Class
于 2012-11-20T10:45:45.393 に答える
3

コメント付きループの代わりにEnd For、を使用する必要がありますNext

他の部分はコンパイラエラーであり、あなたのせいではありません。mono vb コンパイラには、まだ作業が必要です。推測する必要がある場合、ここでの問題は、メソッドが実際には機能しないことがわかり、Datetime.Now の 2 つの使用で不適切な最適化を試みているか、DateTime に間違ったオーバーロードを使用していることです。 .Subtract call... 繰り返しますが、これらは推測にすぎません。

ただし、Datetime 値ではなく System.Diagnostics.Stopwatch クラスを使用する必要があります。

于 2012-11-20T04:42:21.867 に答える
1
Main function is required in file like as below :

     Public Class Application
            Public Shared Sub calc1()
                Dim sq As Integer
                'uncommenting this loop keeps it from compiling for some reason
                'For i as Integer = 1 to 1000
                '   sq = i*i
                'End For
                Console.WriteLine("calculated squares")
            End Sub
        End Class

        Sub Main()
            Dim startTime As DateTime
            Dim endTime As DateTime
            System.Console.WriteLine("Hello world!")
            startTime = Now
            Application.calc1()
            endTime = Now
            Console.WriteLine(endTime.Subtract(startTime).TotalSeconds.ToString("0.0000"))
            Dim inputFromConsole As String
            Dim outputToConsole As String
            Console.WriteLine("Type in a sentence and hit Enter:")
            inputFromConsole = Console.ReadLine()
            Console.WriteLine(outputToConsole)


        End Sub
于 2012-11-20T04:36:14.190 に答える