首页
社区
课程
招聘
[求助]WIN32汇编invoke Process32First编译总是出错
发表于: 2013-8-15 13:59 15670

[求助]WIN32汇编invoke Process32First编译总是出错

2013-8-15 13:59
15670
invoke  Process32First,@hSnapShot,addr @stProcess  
为什么这句话编译总是出错,这代码是网上粘贴的。我自己之前也编过一个相关的。但是就是
invoke  Process32First,@hSnapShot,addr @stProcess  
调用这个函数时候出错了。

invoke  Process32Next,@hSnapShot,addr @stProcess 这个函数调用也不通过。

最让人纳闷的是:
invoke  CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
这句话是编译通过的的。

有没有人遇到这个问题。

我用的是Radmasm和masm32这两个平台。
包含头文件如下:
include    windows.inc
include    user32.inc
includelib  user32.lib
include    kernel32.inc
includelib  kernel32.lib
includelib  msvcrt.lib

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 57
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你要发错误的提示才行.
2013-8-15 16:46
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684839(v=vs.85).aspx

dwSize
The size of the structure, in bytes. Before calling the Process32First function, set this member to sizeof(PROCESSENTRY32). If you do not initialize dwSize, Process32First fails.
2013-8-16 04:23
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
4
可能是缺乏头文件 ,我的头文件:
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;                             I N C L U D E   F I L E S
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
include windows.inc
include kernel32.inc
include user32.inc
include advapi32.inc
includelib kernel32.lib
includelib user32.lib
includelib advapi32.lib

我随便写了下:
LOCAL @hSnapShot,@stProcess

  invoke  Process32First,@hSnapShot,addr @stProcess

编译通过
2013-8-16 09:00
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
错误提示就是  提示没有定义!!!!
2013-8-16 15:49
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
C:\radasm\Masm\Projects\Test01\Test01.asm(60) : error A2006: undefined symbol : Process32First
C:\radasm\Masm\Projects\Test01\Test01.asm(66) : error A2006: undefined symbol : Process32Next
2013-8-16 15:52
0
雪    币: 357
活跃值: (3468)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
7
set masm=E:\masm32
set include=%masm%\include
set lib=%masm%\lib
set Path=%SystemRoot%\system32;%SystemRoot%;%masm%\bin
2013-8-16 16:36
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
8
不是设置的问题,如果会直接提示找不到头文件
2013-8-16 16:45
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你用的平台是什么 我用的是RadAsm 跟 masm32  难道我的版本有问题  ?????
2013-8-16 16:45
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
是啊!!- -            不明真相   代码看得眼睛酸了~!就是找不出 头大 ~!! 竟然提示未定义 纳闷
2013-8-16 16:47
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
11
应该是环境的问题, Process32First是kernel32.dll导出的,你的头文件里面已经包含

建议重新下载版本 RadASM汉化增强版    安装完毕就可以写代码了,集成MASM和KMD驱动库,百度一下第一个就是
2013-8-16 16:52
0
雪    币: 410
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我也编译了一下,用masm32V11的include头文件和lib库编译提示未定义函数,查看include中的kernel.inc头文件,
查找到这段代码:
“Process32FirstW PROTO STDCALL :DWORD,:DWORD
IFDEF __UNICODE__
  Process32First equ <Process32FirstW>
ENDIF
Process32NextW PROTO STDCALL :DWORD,:DWORD
IFDEF __UNICODE__
  Process32Next equ <Process32NextW>
ENDIF”
也就是需要定义__UNICODE__才行,然后我在源文件中(include语句之前)定义:
__UNICODE__        equ      1
再进行编译,就不报错了,但是,运行没结果(乱码或者不显示)!郁闷

于是找了masmplus中的kernel32.inc和kernel32.lib进行替换和编译,不用定义__UNICODE__也不会报“未定义”的错误,而且结果运行正确。
我也郁闷:难道新版的masm32V11不支持非UNICODE版本的Process32First和Process32Next函数??请大神指点下
2013-8-19 11:02
0
雪    币: 1392
活跃值: (5207)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
13
有A系列和W系列。直接指明一下是A还是W试试??
2013-8-19 11:14
0
雪    币: 410
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我在masm32V11中直接指明了W,编译出来显示的结果是乱码。。
在kernel32.inc中只查找到:
“Process32FirstW PROTO STDCALL :DWORD,:DWORD
IFDEF __UNICODE__
  Process32First equ <Process32FirstW>
ENDIF
Process32NextW PROTO STDCALL :DWORD,:DWORD
IFDEF __UNICODE__
  Process32Next equ <Process32NextW>
ENDIF”
根本没有“Process32FirstA”。。
在masmV10 kernel32.inc中是这样的:
Process32First PROTO :DWORD,:DWORD
Process32FirstW PROTO :DWORD,:DWORD
Process32Next PROTO :DWORD,:DWORD
Process32NextW PROTO :DWORD,:DWORD
2013-8-19 12:41
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
IFDEF __UNICODE__
  Process32First equ <Process32FirstW>
ELSE
  Process32First equ <Process32FirstA>
ENDIF
然后用inc2l生成个kernel32.lib

我也遇到这个问题,但是我只是用了Process32FirstW就成功了,没有出现乱码
2013-11-13 16:12
0
雪    币: 11220
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
记得新版我也遇到过这个问题 ,我那时直接把老版本的kernel32.inc复制过来了。
还有就是Process32First没有A版本,就像老版本的那样你直接添加一个就行了。
lib的话你考个windowsdk里面的就行了。
貌似module32那些也有这个问题,估计是当时忘给加了吧。唉,很久没用masm了。。
2013-11-16 20:46
0
雪    币: 346
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
唉,郁闷,我昨晚也遇到这个问题,最开始以为自己代码写错了。后来发现是kernel32.inc头文件里没有Process32First和Process32Next这两个函数的声明,kernel32.lib这个导入库里也没有Process32First和Process32Next这两个函数的地址信息。我的解决方法是去下载masm32v10r,然后重新配置一下它的路径,因为罗云彬老师的书里也是用的这个版本。还有就是没有Process32FirstA和Process32NextA这两个函数。只有Process32First、Process32FirstW、Process32Next和Process32NextW这四个函数。
2013-12-4 15:22
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我也同样遇到这类问题,检查后发现在kernel32.inc中没有process32first,process32next的定义,
添加定义

Process32First PROTO STDCALL :DWORD,:DWORD

Process32Next PROTO STDCALL :DWORD,:DWORD

编译通过....
2014-2-25 00:14
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
楼上的大哥,你在哪里添加的定义,kernel32.lib不用做改动吗?
2014-3-24 10:06
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
估计问题不在这里,前面还有一个A版本的API宏,如果你没有定义它会自动找到A版本的API来调用,可能是被别的地方干扰了,新建一个干净的工程,写点简单的代码测试一下
2014-3-24 12:29
0
雪    币: 409
活跃值: (182)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
masm32v11 这个版本的 Process32First 的确编译不过
error A2006: undefined symbol : Process32First

masm32v10 的可行确编译通过。

烦死了,还是用老版的吧
2014-11-5 10:20
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
22
可以试试自己定义函数原型。
2014-11-11 10:27
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
学习一下!
2014-12-3 12:53
0
游客
登录 | 注册 方可回帖
返回
//