只做一件事 发表于 2024-3-4 09:27:28

易语言的“调用函数(进程ID,代码)”分析

好多朋友在用了某个模块中的这个函数时,就会出现问题,我先公布一下自己的代码:
.版本   

进程句柄 = 打开进程 (2035711, 假, 进程ID)
代码长度 = 取字节集长度 (代码) +   
线程首地址 = 分配内存 (进程句柄, 0, 代码长度, 4096, 4)
      (进程句柄, 线程首地址, 代码, 代码长度, 0)
线程句柄 = 远程创建线程 (进程句柄, 0, 0, 线程首地址, 0, 4, 线程ID)
运行线程 (线程句柄)
等待线程结束 (线程句柄, -1)
释放内存 (进程句柄, 线程首地址, 4096, 16384)
关闭句柄 (线程句柄)
关闭句柄 (进程句柄)

主要的问题有如下几种:



1.自己的程序句柄不断增加,主要原因是内存泄露,也就是少了这两句:关闭句柄 (线程句柄)
和关闭句柄 (进程句柄)。
    2.自己的程序在关闭时会报错,主要原因应该是设置了延时,也就是这句:等待线程结束 (线程句柄      ,第二个参数不对。
    3.游戏内存不停的上涨,主要原因在这句:释放内存 (进程句柄, 线程首地址, 4096, 16384)。最后一个参数不正确。有的人说应该用,不过我在MSDN上查得:如果这个
参数为,那么第三个参数必须置。所以呢,既然你申请的内存类型是,那么释放的时候也应该相同才对啊。

上面所用到的各种数值均和VC++中ntddk.h中的宏定义相对应,愿意看的可以自己查MSDN中的参数类型,然后再到ntddk.h中找。

再说一下上面代码中对应的API:

打开进程:openprocess
分配内存:VirtualAllocEx
写入内存:WriteProcessMemory
远程创建线程:CreateRemoteThread
运行线程:ResumeThread
等待线程结束:WaitForSingleObject
释放内存:VirtualFreeEx
关闭句柄:CloseHandle

最后说几句:上面的函数除了两个参数,其他的变量均为局部变量。
那个释放内存的API,如果换另一种参数,作用就会和内存优化的效果差不多。

好多人在用了易写程序出问题时就说是E不稳定,其实大部分还是自己的原因,多钻研一下就明白了。
语言只是一种工具,培养优秀的编程风格才是最重要的。

可笑的就是好多用C++的人BS用DEPHI的,用D的呢,又BS用VB的,用VB的BS用E。真是相当的无语。拿编程语言来抬高自己的档次,足见这些人有多自卑。

好了,关于这个的问题,我能说的就这些了,欢迎拍砖,也欢迎来信,但拒绝灌水。
页: [1]
查看完整版本: 易语言的“调用函数(进程ID,代码)”分析