मैंने कुछ को फिर से बनाया है OpenNetCF जैसे घटक ऊर्जा प्रबंधन तथा DeviceStatusMonitor। लेकिन जब से उन्होंने कभी कोई घटना नहीं उठाई, मुझे संदेह था कि कुछ गलत था। मेरा पहला विचार था कि मैं जाँच करूँ P2Pसंदेश कतार जिस पर वे दोनों निर्भर करते हैं। और फिर बीएएम, संदेश कतार बनाएं रिटर्न IntPtr.Zero. अंतिम Win32Error की जाँच करने से मुझे -2147467259 (माइनस) मान का त्रुटि कोड मिलता है।
क्या यह सिर्फ एक और सामान्य त्रुटि कोड है जो कोई संकेत नहीं देता है?
किसी भी सहायता की सराहना की जाएगी।
(एफवाईआई: विनसीई 5.0, सीएफ 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 के लिए 1The lpOptions
पैरामीटर गलत घोषित किया गया है। आप इसे घोषित करते हैं ByVal
लेकिन यह होना चाहिए ByRef
.
ने कहा कि, -2147467259
एक अजीब सा है। यह एक Win32 त्रुटि कोड नहीं है। यह एक COM है HRESULT
. विशेष रूप से यह "s 0x80004005
. Win32 के आसपास COM रैपर कौन सा है ERROR_ACCESS_DENIED
. सुनिश्चित नहीं है कि आपको COM कहाँ मिलता है HRESULT
से इस कोड में आप ध्यान रखते हैं, लेकिन ऐसा प्रतीत होता है कि आप जो प्रयास कर रहे हैं उसके लिए आपके पास पर्याप्त अधिकार नहीं हैं।