【发布时间】:2020-09-27 18:07:01
【问题描述】:
我需要从masm 上编写的程序中调用GetVersionExA 函数。它接受LPOSVERSIONINFOA 类型的单个参数lpVersionInformation。我想LPOSVERSIONINFOA 是_OSVERSIONINFOA 结构的实例。
所以我写了这个简单的程序但得到了以下错误:
Error A2114 INVOKE argument type mismatch : argument : 1
main.asm 24
我不知道出了什么问题以及如何解决它。
.586
.model flat, STDCALL
option casemap :none
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\Advapi32.inc
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\Advapi32.lib
.data
params OSVERSIONINFOA <>
buf db 100 dup(?),0
titl1 db '№ 5 ', 0
ifmt db "Info = %d %d %d %d %d %c",0dh,0ah,0ah,0
.code
Start:
invoke GetVersionEx, params ; <================================ 24
invoke wsprintf,ADDR buf,ADDR ifmt,params.dwOSVersionInfoSize,params.dwMajorVersion ,params.dwMinorVersion ,params.dwBuildNumber ,params.dwPlatformId ,params.szCSDVersion
invoke MessageBox, NULL, ADDR buf, ADDR titl1, MB_OK
invoke ExitProcess, 0
end Start
【问题讨论】:
-
除了 params 的指针,GetVersionEx 可能会被更改或在 Windows 8.1 之后的版本中不可用。相反,请使用Version Helper functions。