0
我在Win 7旗艦版測試這一點,它產生一個錯誤:調用GetProductInfo時得到一個PInvokeStackImbalance錯誤[VB.NET]
PInvokeStackImbalance was detected Message: A call to PInvoke function 'WindowsApplication1!WindowsApplication1.Form1::GetProductInfo' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
Public Class Form1
Private Const PRODUCT_STARTER As Integer = &HB 'Starter
Private Const PRODUCT_HOME_BASIC As Integer = &H2 'Home Basic
Private Const PRODUCT_HOME_BASIC_N As Integer = &H5 'Home Basic N
Private Const PRODUCT_HOME_PREMIUM As Integer = &H3 'Home Premium
Private Const PRODUCT_HOME_PREMIUM_N As Integer = &H1A 'Home Premium N
Private Const PRODUCT_BUSINESS As Integer = &H6 'Business
Private Const PRODUCT_BUSINESS_N As Integer = &H10 'Business N
Private Const PRODUCT_ENTERPRISE As Integer = &H4 'Enterprise
Private Const PRODUCT_ENTERPRISE_N As Integer = &H1B 'Enterprise N
Private Const PRODUCT_ULTIMATE As Integer = &H1 'Ultimate
Private Const PRODUCT_ULTIMATE_N As Integer = &H1C 'Ultimate N
Private Declare Function GetProductInfo Lib "kernel32" _
(ByVal dwOSMajorVersion As Long, ByVal dwOSMinorVersion As Long, _
ByVal dwSpMajorVersion As Long, ByVal dwSpMinorVersion As Long, _
ByRef pdwReturnedProductType As Long) As Long
Public Function GetOSProduct() As String
Dim os As OperatingSystem = Environment.OSVersion
Dim prodType As Long
GetOSProduct = ""
If GetProductInfo(os.Version.Major, os.Version.Minor, 0, 0, prodType) Then
Select Case prodType
Case PRODUCT_ULTIMATE
GetOSProduct = "Ultimate"
Case PRODUCT_ULTIMATE_N
GetOSProduct = "Ultimate N"
Case Else
GetOSProduct = "unknown"
End Select
End If
End Function
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
MsgBox(GetOSProduct)
End Sub
End Class
誰能幫助我嗎?