放血救命:在winNt中调用16位的dos进程(100分)

  • 主题发起人 主题发起人 jackliew
  • 开始时间 开始时间
J

jackliew

Unregistered / Unconfirmed
GUEST, unregistred user!
程序如下:
bCreated := CreateProcess( nil,'c:/exe/pkzip.exe c:/exe/tmp.zip c:/exe/tmp/*.*' ,nil,nil,False,
NORMAL_PRIORITY_CLASS or CREATE_SEPARATE_WOW_VDM,nil,nil,StartupInfo,
ProcessInfo )
if bCreated then
WaitForsingleObject( ProcessInfo.hProcess ,INFINITE )

如果连续调用(如循环等)nt报错:ntvdm 初始化user32.dll出错
该exception无法获得.

问,在delphi调用16一定会出现这个错误吗?是否有解决方案?
请赐教!
 
请继续或结束
 
没有人回答吗?
 
是否有用?
uses Wintypes,WinProcs,Toolhelp,Classes,Forms;

Function WinExecAndWait(Path : string; Visibility : word) : word;
var
InstanceID : THandle;
PathLen : integer;
begin
{ inplace conversion of a String to a PChar }
PathLen := Length(Path);
Move(Path[1],Path[0],PathLen);
Path[PathLen] := #00;
{ Try to run the application }
InstanceID := WinExec(@Path,Visibility);
if InstanceID < 32 then { a value less than 32 indicates an Exec error }
WinExecAndWait := InstanceID

else begin
Repeat
Application.ProcessMessages;
until Application.Terminated or (GetModuleUsage(InstanceID) = 0);
WinExecAndWait := 32;
end;
end;
 
请继续或结束
 
请继续或结束
 
接受答案了.
 
后退
顶部