在下面的代码中调用GetSystemInfo之后,所有的GetSystemInfo字段都是0,这就是我在这里试图解决的问题。
这与在GetSystemInfo上快速搜索可以找到的几个示例的代码差不多,因此我认为代码本身并不是错误的:
Private Structure SYSTEM_INFO
Public dwOemID As Long
Public dwPageSize As Long
Public lpMinimumApplicationAddress As Long
Public lpMaximumApplicationAddress As Long
Public dwActiveProcessorMask As Long
Public dwNumberOfProcessors As Long
Public dwProcessorType As Long
Public dwAllocationGranularity As Long
Public wProcessorLevel As Integer
Public wProcessorRevision As Integer
End Structure
Private Declare Sub GetSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM_INFO)
Private Sub GetProcessorInfo()
Dim SI As SYSTEM_INFO
Dim tmp As String
Call GetSystemInfo(SI)
Select Case SI.dwProcessorType
Case PROCESSOR_INTEL_386 : tmp = "386"
Case PROCESSOR_INTEL_486 : tmp = "486"
Case PROCESSOR_INTEL_PENTIUM : tmp = "Pentium"
Case PROCESSOR_MIPS_R4000 : tmp = "MIPS 4000"
Case PROCESSOR_ALPHA_21064 : tmp = "Alpha"
End Select
Select Case SI.wProcessorLevel
Case PROCESSOR_LEVEL_80386 : tmp = "Intel 80386"
Case PROCESSOR_LEVEL_80486 : tmp = "Intel 80486"
Case PROCESSOR_LEVEL_PENTIUM : tmp = "Intel Pentium"
Case PROCESSOR_LEVEL_PENTIUMII : tmp = "Intel Pentium Pro, II, III or 4"
End Select
End Sub我正在从单元测试中在调试会话中测试这段代码。操作系统是Windows 10,VS Enterprise 2019。
编辑:代码从VB6转换为VB.Net,可能会出现Structure (最初是Type )、包含的数据类型或传递给GetSystemInfo的方式的问题。
发布于 2022-07-12 12:22:00
您的定义中有许多错误
DWORD应该是IntegerWORD,应该是ShortLPVOID,而DWORD_PTR应该是IntPtr<Out()> ByRefPrivate Structure SYSTEM_INFO
Public dwOemID As Integer
Public dwPageSize As Integer
Public lpMinimumApplicationAddress As IntPtr
Public lpMaximumApplicationAddress As IntPtr
Public dwActiveProcessorMask As IntPtr
Public dwNumberOfProcessors As Integer
Public dwProcessorType As Integer
Public dwAllocationGranularity As Integer
Public wProcessorLevel As Short
Public wProcessorRevision As Short
End Structure
Private Declare Sub GetSystemInfo Lib "kernel32" (<Out()> ByRef lpSystemInfo As SYSTEM_INFO)https://stackoverflow.com/questions/72951580
复制相似问题