2011-08-24 17 views
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 

誰能幫助我嗎?

回答

1

只需更換整數(VB.NET中使用)

(VB6中使用)
相關問題