delphi无法运行且不报错,请大牛指导~~

carter91620 2012-08-10 04:28:41
创建了2个窗口form1,form2,form1是主窗口。
在form1窗口显示时进入form2。

但执行程序时,却form1,form2都不能显示。

一步步调试后发现,从form1根本就进不去form2。

求大牛们给解释,给跪了~~~
...全文
240 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
天涯看雪 2013-06-25
  • 打赏
  • 举报
回复
怎么解决的啊 我也出现了 是偶尔 卡住 郁闷死
carter91620 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

莫非vcl引用出问题?你在这调用了label。。我不是大牛。。。
[/Quote]
现在可以确定是在ReadFile()函数这里卡住了~~。。。。
hsfzxjy 2012-08-10
  • 打赏
  • 举报
回复
莫非vcl引用出问题?你在这调用了label。。我不是大牛。。。
carter91620 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

。。。不应该啊。按理说应没问题。有异常么
[/Quote]
没有啊,什么异常都没有抛出!!!

当我运行的时候,界面窗口都不会弹出来。。
然后我把
WaitForSingleObject(pi.hProcess,INFINITE);
if ReadFile(hReadPipe, dest, SizeOf(dest), BytesRead, nil) then
begin
ProcessLabel.Caption := Copy(string(dest),1,BytesRead);
end;

这些都注释掉然后,就可以运行了,但功能就不是我想要实现的了!
hsfzxjy 2012-08-10
  • 打赏
  • 举报
回复
。。。不应该啊。按理说应没问题。有异常么
carter91620 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

咳。。不是readfile出问题,是上一句。这是一个阻塞函数。。。不死机才怪。。你要这句作甚?
[/Quote]
我把WaitForSingleObject注释掉,还是会在ReadFile处死掉。。。。
hsfzxjy 2012-08-10
  • 打赏
  • 举报
回复
咳。。不是readfile出问题,是上一句WaitForSingleObject。这是一个阻塞函数。。。不死机才怪。。你要这句作甚?
carter91620 2012-08-10
  • 打赏
  • 举报
回复
补充一下:
RunDos(const CommandLine : string): string;中传进去的是一条DOS的可执行命令。比如说是:ping 127.0.0.1
carter91620 2012-08-10
  • 打赏
  • 举报
回复
补充一下:
RunDos(const CommandLine : string): string;中传进去的是一天DOS的可执行命令。
carter91620 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

。。。。就form2显示那块,你不给我怎么说。。
[/Quote]
找到了哪出毛病了。但还是不能解决,大牛帮我看看!!!

function TFormProcess.IsWindowsNT: Boolean;
var
osv : OSVERSIONINFO;
begin
osv.dwOSVersionInfoSize := SizeOf(osv);
GetVersionEx(osv);
if osv.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
Result := True;
end
else
begin
Result := False;
end;
end;
{自定义--运行DOS命令}
function TFormProcess.RunDos(const CommandLine : string): string;
var
sa : TSecurityAttributes;
sd : SECURITY_DESCRIPTOR;
lpsa : PSecurityAttributes;
hReadPipe : THandle;
hWritePipe : THandle;
si : TStartupInfo;
pi : TProcessInformation;
dest : array [0..4095] of Char;
BytesRead : DWORD;
begin
Result := '调用失败';
lpsa := nil;
if (IsWindowsNT) then
begin
InitializeSecurityDescriptor(@sd,SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(@sd,True,nil,False);
sa.nLength := SizeOf(SECURITY_ATTRIBUTES);
sa.bInheritHandle := True;
sa.lpSecurityDescriptor := @sd;
lpsa := @sa;
end;
Assert(CreatePipe(hReadPipe,hWritePipe,lpsa,0));
GetStartupInfo(si);
si.cb := SizeOf(TStartupInfo);
si.dwFlags := STARTF_USESHOWWINDOW + STARTF_USESTDHANDLES;
si.wShowWindow := SW_HIDE;
si.hStdOutput := hWritePipe;
si.hStdError := hWritePipe;
CreateProcess(
nil,
PChar(CommandLine),
nil, nil, True,
0, nil, nil,
si, pi
);
CloseHandle(pi.hThread);
WaitForSingleObject(pi.hProcess,INFINITE);
if ReadFile(hReadPipe, dest, SizeOf(dest), BytesRead, nil) then
begin
ProcessLabel.Caption := Copy(string(dest),1,BytesRead);
end;
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
Closehandle(pi.hProcess);
end;

是在ReadFile(hReadPipe, dest, SizeOf(dest), BytesRead, nil);程序一直在执行这条语句,死在了这里。
大牛帮我看看,该如何解决。。。。。
hsfzxjy 2012-08-10
  • 打赏
  • 举报
回复
。。。。就form2显示那块,你不给我怎么说。。
carter91620 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

给代码
[/Quote]

代码比较长。不好发啊~~~~(>_<)~~~~
hsfzxjy 2012-08-10
  • 打赏
  • 举报
回复
给代码

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧