调用 WinApi GetVersionExA 函数时出错:错误 A2114 INVOKE 参数类型不匹配:参数:1
Error with call of WinApi GetVersionExA function: Error A2114 INVOKE argument type mismatch : argument : 1
我需要调用 GetVersionExA function from the program written on masm
. it accepts a single parameter lpVersionInformation
of the type LPOSVERSIONINFOA
. Where LPOSVERSIONINFOA
as i suppose is the instance of _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
LPOSVERSIONINFOA
是指向 OSVERSIONINFOA
的 指针 。因此,正如 wsprintf()
将分配的 char[]
数组的 地址 写入以返回其输出字符串一样, GetVersionEx()
将 地址 分配的 OSVERSIONINFOA
写入以返回其版本数据。
另外,你需要在调用GetVersonEx()
之前设置OSVERSIONINFOA.dwOSVersionInfoSize
字段,所以它知道你是否传递给它地址的一个实例OSVERSIONINFOA
或 OSVERSIONINFOEXA
(具有不同的大小和字段)。
我需要调用 GetVersionExA function from the program written on masm
. it accepts a single parameter lpVersionInformation
of the type LPOSVERSIONINFOA
. Where LPOSVERSIONINFOA
as i suppose is the instance of _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
LPOSVERSIONINFOA
是指向 OSVERSIONINFOA
的 指针 。因此,正如 wsprintf()
将分配的 char[]
数组的 地址 写入以返回其输出字符串一样, GetVersionEx()
将 地址 分配的 OSVERSIONINFOA
写入以返回其版本数据。
另外,你需要在调用GetVersonEx()
之前设置OSVERSIONINFOA.dwOSVersionInfoSize
字段,所以它知道你是否传递给它地址的一个实例OSVERSIONINFOA
或 OSVERSIONINFOEXA
(具有不同的大小和字段)。