CoShellWindows问题 ( 积分: 50 )

  • 主题发起人 主题发起人 涛子_1966
  • 开始时间 开始时间

涛子_1966

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个无窗口程序中调用:
SW:=CoShellWindows.Create;
for i:=0 to SW.Count-1 do begin
spDisp := SW.item(i)
//当i=1时程序死掉
........
end;

同样的写法,在有窗口程序中执行正常,请问是和道理,如何解决
 
我在一个无窗口程序中调用:
SW:=CoShellWindows.Create;
for i:=0 to SW.Count-1 do begin
spDisp := SW.item(i)
//当i=1时程序死掉
........
end;

同样的写法,在有窗口程序中执行正常,请问是和道理,如何解决
 
你的 无窗口程序 指什么?控制台程序?在DPR当中直接代码?
你确定是spDisp := SW.item(i);这一句死掉?没有异常?SW.Count为多少?

这个问题不是很清楚,恐怕需要你自己详细跟踪排除了。
 
楼上:
无窗口是指直接在DPR中运行代码
SW.count>3
 
如果在有窗口程序正常.那么你尝试从正常的窗口程序逐步删减.
1.屏蔽生成窗体的代码.
2.删除对Forms,pas的引用
3.逐个删除可以删除的单元的引用.

如果真是这种情况,除非是某个引用的单元当中作了某种初始化操作.
如果你查找到某个单元导致问题之后,察看那个单元的Initilization和此单元引用的单元的初始化代码.
比如使用COM需要初始化COM库CoInitilize,不过我记得如果不初始化COM库在普通的程序中是会报错的.
 
似乎不是初始化的问题,我未加CoinitializeEx(nil,0)时,报错:没有足够存储空间
加了CoinitializeEx(nil,0)后,取得IE实例的接口CoShellWindows.Create正常,
SW:=CoShellWindows.Create
其中的SW.Count也是正确的
只是调用到sw.Item(i)时出错

另,我试着在无窗口中引用了所有有窗口单元的引用,结果也是一样----出错
 
因为我身边没有环境,因此无法详细测试.也许是建立窗体之后对于Application的消息循环有影响?
你尝试一下直接建立一个控制台工程写代码.另外如果有VC环境,也测试以下.
另外,出错和死掉是两个概念.错处的话,你可以查看返回值,GetLaseError等错误代码,从而找到原因.死掉,也就是说,不再返回你的代码,这要麻烦的多.
很抱歉,我不能再给你更多的帮助.
 
不是出错,是系统死掉,状态:鼠标可以移动,但无点击动作,键盘失效,但Ctrl+Alt+Del可以,
强行中止进程后,系统恢复正常
 
实在不行就建一个窗体得了
 
后退
顶部