在delphi中,主程序和dll调用的成功,但是关闭的时候报错

在delphi中,主程序和dll调用的成功,但是关闭的时候报错,第1张

这种错误比较难查,而且只能你自己查。

查错陵态的方法:

1、注释代码,部分代码注释尺肢源掉,看看有没有问题,然后注释其他不是,看看有没有问题,找到那一部分饥卖代码出现了问题。

2、如果只是调用dll出现的问题,可能是参数传递的有问题,换换参数传递的内容,类型等。

在运行里输入cmd进入命令提示符。

然世亏后输入命令tasklist /m>c:/123.txt

不要急。到C盘下面去找一找,是不是有了一个123.txt?(当然。可以自己设定文件的输出路径,名字,甚至后缀。但要是文本文件哦。)

打开他。里面就是目前运行的各个程序正在调用的dll文件。

找出来了后问题就好办多了。打开任务管理帆返耐器。把对应的那个程序给关了。就可以顺利删除了。那就不必进安全模式,进DOS那么麻烦了。

当然态春。有些应用程序是以服务形式运行的。那么你就有可能查到的是svhost.exe但是。里面有很多个哦。。这个也好办。仍然打开命令提示符。输入

tasklist /svc,当然,也可以把他输出为文本文件,如tasklist

/svc>C:/234.txt。看到了吗?每个svchost.exe后面是不是对应有一个ID呢?有了ID一对照也可以知道是哪个服务了

不要用 WINEXEC, 用ShellExcute 执行

用WaitForSingleObject等待其结束

winexec不会等待返回就直接跳下一步了,当然不行。

如果不会 shellexecute的话

WinExec('cmd /C '+'taskkill /f /派行银im Search.exe',0)

sleep(5000)

application.ProcessMessages

DeleteFile('c:\C:\Program Files\wsearch\Mouse1.dll')

好了 采纳尘宴吧

要是你实在实在不想用那两种方法的话

给你个函数, 比你调用dos 命令要有效率的带镇多

function KillTask(ExeFileName: string): Integer//关闭进程

const

PROCESS_TERMINATE = $0001

var

ContinueLoop: boolean

FSnapshotHandle: THandle

FProcessEntry32: TProcessEntry32

begin

Result := 0

FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

FProcessEntry32.dwSize := SizeOf(FProcessEntry32)

ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32)

while Integer(ContinueLoop) <>0 do

begin

if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =

UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =

UpperCase(ExeFileName))) then

Result := Integer(TerminateProcess(

OpenProcess(PROCESS_TERMINATE,

BOOL(0),

FProcessEntry32.th32ProcessID),

0))

ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32)

end

CloseHandle(FSnapshotHandle)

end

////// 调用用

KillTask('Search.exe');


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12423205.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存