版块 > WinDev 讨论区 > 关于api参数为自定义结构的数据类型错误问题
消息:
31
1.如何将api传递参数定义为传送地址????
 
2.关于api参数为自定义结构的数据类型错误问题
源码
定义_快照信息为结构
定义结构大小为整数型变量
定义进程计数为整数型变量
定义进程ID为整数型变量
定义进程默认堆ID为整数型变量
定义进程模块ID为整数型变量
定义线程计数为整数型变量
定义父进程ID为整数型变量
定义线程优先权为整数型变量
定义保留为整数型变量
定义进程名字为字节型的数组型变量【256】
//定义进程名称为ANSI字符串型
结束

过程 公共  进程PID(进程名)//获取指定进程的ID

定义快照句柄为整数型变量
定义进程句柄为整数型变量
定义快照信息为_快照信息变量
定义进程名称为ANSI字符串型
//定义临时为_快照信息变量
定义a为整数型变量
快照句柄=API("kernel32.dll","CreateToolhelp32Snapshot",2,0)//获取所有进程快照
如果快照句柄不等于-1并且快照句柄不等于0,那么
// a=API("kernel32.dll","LocalSize",快照信息)//获取结构大小
 a=296//-256
// 跟踪(a)
 快照信息.结构大小=a//296
 
 进程句柄=API("kernel32.dll","Process32First",快照句柄,快照信息)//获取第一个快照信息//!!!!!!!!!!这里提示出错
 循环
  如果进程句柄等于0,那么
   跳出
  结束
  进程名称=数组转换为字符串(快照信息.进程名字)
  如果字符串比较(进程名,进程名称,字符串.忽略大小写)等于0,那么//相等跳出
   跳出
  结束
  进程句柄=API("kernel32.dll","Process32Next",快照句柄,快照信息)//获取下一个快照信息
 结束
结束
API("kernel32.dll","CloseHandle",快照句柄)//关闭快照
//如果进程句柄等于0,那么
// 发送回0
//否则
// 发送回快照信息.进程ID
//结束
发送回快照信息.进程ID
 
 
下面是失败 信息
Error at line 23 of 全局过程 进程PID process.
API function called.
Runtime error caused by 'Process32First' function of kernel32.dll DLL.
----- Technical Information -----
项目 : 我的项目
WL call:
Process of '全局过程 进程PID' (Windows_API.进程PID), line 23, thread 0
'API' function, syntax 0
What happened?
Runtime error caused by 'Process32First' function of kernel32.dll DLL.
Error code: 2805
Level: fatal error (EL_FATAL)
Dump of the error of 'wd170vm.dll' module (17.0.309.0 CN).
Identifier of detailed information (.err): 2805
Debugging information:
Détails techniques :
Module : kernel32.dll
Adresse de base : 7C800000
Erreur système : Access violation (GPF)
EIP = 7C865557
OS : Windows XP ou .NET Service Pack 3(5.1.2600)
Registres :
  EIP = 7C865557    EBP = 0012ED50
  EAX = 000000B0    EBX = 00000000
  ECX = FFFFFFFF    EDX = 000000B0
  ESI = 00000128    EDI = 0012F0FC
Pile des appels :
[kernel32.dll (7C800000)] 7C865535 : Process32First() + 34 bytes
Fonction (0,90)
Additional Information:
EIT_PILEWL :
全局过程 进程PID (Windows_API.进程PID), 行 23
EIT_DATEHEURE : 17/04/2013 22:55:53
帮助
Check parameters:
- whether the parameter type is correct
- whether null values are supported
- whether previous callDLL32 are correct.
- if the problem persists, contact the DLL author.

 

 

 

 

 
消息:
9

您好

  
您需要声明一个固定数组在结构中。通过以下的语法:

定义进程名字字节型的固定长度数组型变量【256


并且使用操作符 « & »,为了获取结构的地址:

进程句柄API"kernel32.dll""Process32First"快照句柄&快照信息


消息:
31
试了一下成功了
    统计
    注册会员总数: 379
    论坛帖子总数: 1049