/ / CreateMsgQueue Win32Error -2147467259 के साथ विफल रहता है - vb.net, winapi, कॉम्पैक्ट-फ्रेमवर्क, विंडोज़-सी, कॉम्पैक्ट-फ्रेम 2.0

CreateMsgQueue Win32Error -2147467259 - vb.net, winapi, कॉम्पैक्ट-फ्रेमवर्क, विंडोज-सीई, कॉम्पैक्ट-फ्रेमवर्क 2.0 के साथ विफल रहता है

मैंने कुछ को फिर से बनाया है 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 के लिए 1

The lpOptions पैरामीटर गलत घोषित किया गया है। आप इसे घोषित करते हैं ByVal लेकिन यह होना चाहिए ByRef.

ने कहा कि, -2147467259 एक अजीब सा है। यह एक Win32 त्रुटि कोड नहीं है। यह एक COM है HRESULT. विशेष रूप से यह "s 0x80004005. Win32 के आसपास COM रैपर कौन सा है ERROR_ACCESS_DENIED. सुनिश्चित नहीं है कि आपको COM कहाँ मिलता है HRESULT से इस कोड में आप ध्यान रखते हैं, लेकिन ऐसा प्रतीत होता है कि आप जो प्रयास कर रहे हैं उसके लिए आपके पास पर्याप्त अधिकार नहीं हैं।