私はいくつかの OpenNetCF コンポーネントのような パワー管理 そして DeviceStatusMonitor。しかし、彼らは決して事態を起こさなかったので、私は何かが間違っていると思った。私の最初の考えは、 P2PMessageQueue 彼らはどちらも両方に依存しています。そして、BAM、 CreateMsgQueue 返品 IntPtr.Zero。最後のWin32Errorをチェックすると、値-2147467259(マイナス)のエラーコードが返されます。
これはヒントを提供しない一般的なエラーコードですか?
どんな助けもありがとう。
(FYI:WinCE 5.0、CF 2.0)
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim lpName As String = "MyQueue"
Dim lpOptions As MSGQUEUEOPTIONS = New MSGQUEUEOPTIONS()
Dim hMsgQ As IntPtr = IntPtr.Zero
lpOptions.bReadAccess = True
lpOptions.dwMaxMessages = 0
lpOptions.cbMaxMessage = &H1000
lpOptions.dwFlags = MSGQUEUE_ALLOW_BROKEN
lpOptions.dwSize = Marshal.SizeOf(lpOptions)
hMsgQ = CreateMsgQueue(lpName, lpOptions)
If (hMsgQ = IntPtr.Zero) Then
Throw New Win32Exception(Marshal.GetLastWin32Error())
Else
CloseMsgQueue(hMsgQ)
End If
Catch ex As Win32Exception
MessageBox.Show(String.Format(String.Format("Win32Exception: {0}", ex.ErrorCode)))
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
<DllImport("coredll.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Private Shared Function CloseMsgQueue(ByVal hMsgQ As IntPtr) As Boolean
End Function
<DllImport("coredll.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
Private Shared Function CreateMsgQueue(<MarshalAs(UnmanagedType.LPWStr)> ByVal lpName As String, ByVal lpOptions As MSGQUEUEOPTIONS) As IntPtr
End Function
<StructLayout(LayoutKind.Sequential)> _
Private Structure MSGQUEUEOPTIONS
Public dwSize As Integer
Public dwFlags As Integer
Public dwMaxMessages As Integer
Public cbMaxMessage As Integer
Public bReadAccess As Boolean
End Structure
Private Const MSGQUEUE_ALLOW_BROKEN As Integer = 2
Private Const MSGQUEUE_NOPRECOMMIT As Integer = 1
Private Const MSGQUEUE_MSGALERT As Integer = 1
End Class
回答:
回答№1は1ザ lpOptions
パラメータが正しく宣言されていません。あなたはそれを ByVal
しかしそれはすべきです ByRef
.
それは、 -2147467259
奇妙なことです。それはWin32エラーコードではありません。それはCOMです HRESULT
。具体的には、 0x80004005
。どのWin32の周りのCOMラッパーです ERROR_ACCESS_DENIED
。あなたはCOMを取得するか分からない HRESULT
このコードの心の中から、あなたが試みていることに対して十分な権利を持っていないように見えます。