1

これはエラーなしでコンパイルされますが、このコード セクションを実行すると、奇妙なエラーが表示されます。

FatalExecutionEngineError が検出されました メッセージ: ランタイムで致命的なエラーが発生しました。エラーのアドレスは、スレッド 0xd7c の 0x792062fb でした。エラー コードは 0xc0000005 です。このエラーは、CLR のバグ、またはユーザー コードの安全でない部分または検証不可能な部分のバグである可能性があります。このバグの一般的な原因には、COM 相互運用機能または PInvoke のユーザー マーシャリング エラーが含まれ、スタックが破損する可能性があります。

私は次のようなことを試みます:

    Public Enum PipePolicyType
        SHORT_PACKET_TERMINATE = 1
        AUTO_CLEAR_STALL = 2
        PIPE_TRANSFER_TIMEOUT = 3
        IGNORE_SHORT_PACKETS = 4
        ALLOW_PARTIAL_READS = 5
        AUTO_FLUSH = 6
        RAW_IO = 7
        RESET_PIPE_ON_RESUME = 9
    End Enum

...
...

        Dim a As UInt32 = 3000

        SetPolicy(1, PIPE_TRANSFER_TIMEOUT, a)

...
...
Public Sub SetPolicy(ByVal ep As Integer, ByVal PolicyType As PipePolicyType, ByVal PolicyValue As UInt32)


end sub

なにが問題ですか ?

4

2 に答える 2

2

わかりました、私は完全に別の場所で問題を見つけましたが、理解できません。私の列挙型にはまったく問題はありませんでした.管理されていないラッパーのいくつかの奇妙なエラー:

    Dim PUnmanagedDetailedInterfaceDataStructure As IntPtr = IntPtr.Zero
    PUnmanagedDetailedInterfaceDataStructure = Marshal.AllocHGlobal(StructureSize)

これは、このように数日前に短縮されました

    Dim PUnmanagedDetailedInterfaceDataStructure As IntPtr = Marshal.AllocHGlobal(StructureSize)

2番目の宣言の問題は何ですか?!

于 2012-12-28T01:34:25.333 に答える
0

PipePolicyType.PIPE_TRANSFER_TIMEOUT を使用して呼び出す必要があります

Public Class Form1
    Public Sub SetPolicy(ByVal ep As Integer, ByVal PolicyType As PipePolicyType, ByVal PolicyValue As UInt32)

    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        Dim a As UInt32 = 3000

        SetPolicy(1, PipePolicyType.PIPE_TRANSFER_TIMEOUT, a)
    End Sub
End Class

Public Enum PipePolicyType
    SHORT_PACKET_TERMINATE = 1
    AUTO_CLEAR_STALL = 2
    PIPE_TRANSFER_TIMEOUT = 3
    IGNORE_SHORT_PACKETS = 4
    ALLOW_PARTIAL_READS = 5
    AUTO_FLUSH = 6
    RAW_IO = 7
    RESET_PIPE_ON_RESUME = 9
End Enum
于 2012-12-27T20:10:44.463 に答える