高手求救!编好了的程序,重装系统后就出错了!怎么办啊?源代码都没有改啊!(100分)

  • 主题发起人 主题发起人 q09876
  • 开始时间 开始时间
Q

q09876

Unregistered / Unconfirmed
GUEST, unregistred user!
一个小程序,其中有部分为下载功能,通过主窗体的菜单调出下载设置窗口(form2),
在form2上有个edit1和button1。以前只要在edit1里面输入网址,按下button1后,程序就可
开始执行操作,没有一点问题的。
我是WIN98系统,昨天格式化C盘,重装了系统,现在发现这个程序出问题了,具体情况是:
当在edit1里输完网址并按下button1后,程序出错,错误提示框中提到了这个文件:kernel32.dll。
我试着在Delphi6里重新编译并执行程序,也出现这个错误提示,此时程序还未关闭,于是我连按了
两次 Trace into 按钮来往下执行,此时又弹出另一个错误提示框,上面又提示了另一个文件名:wininet.dll,
我发现这两个都是Windows系统文件,就通过系统工具“系统文件检查器”从Windows安装包里恢复了这两个文件,
重启后程序还是出错!!!现在我已经试了多次了,都不行!
请问程序为什么会出错啊?(绝对没有改任何代码!!!)
我现在该怎么办?请各位救救我!!!
 
系统有问题了呀.
 
可能是IE版本的问题,升级到IE5.5或6.0后再编译看看.
 
你的Button执行一些什么功能???
 
升级一下IE看看.
 
你的程序对IE的版本有要求吗?
是不是类库路径发生了变化?
不会是系统有问题了吧?可是你刚重新装过啊。
想想前后哪些更细节的变化。
 
IE版本?
我以前的98还是IE 5.0时就已把这部分功能做完了,正常;后来是升级到了IE 6.0的,运行
也正常,现在重装了98,IE 又是5.0的了,难道真和这IE版本有关啊?
程序代码里面好像没有关于IE版本方面的内容啊?
那这个程序现在放到没有升级到IE 6.0的WIN98上,那不是用不成吗?
 
你程序里做了些什么?
 
啊,原因好像找到了!
程序一开始要判断输入的网址是否有效,如果有效就继续执行,无效就弹出警告对话框。
别人告诉我用这个函数来验证网址是否有效
InternetCheckConnection(PChar(edit1.text),1,0)
我刚刚把它注释掉了,程序就正常了,但为什么以前是好的呢?
那现在应该怎么办啊?
 
DELPHI有没有重装?重装的话你用到的控件也要装一遍。
 
经常的拉
 
delphi和控件当然都重装过了。
为什么以前那个函数能用,现在就不行了?
怎么办呢?
 
谁来告诉我啊?[:(]
 
DELPHI编程检测Internet 连接状态
  检测计算机是否联网比较简单的做法可以通过一个 Win32 Internet(WinInet) 函数Int ernetCheckConnection来实现;
  这个函数的功能是检查是否能够建立 Internet 连接。
  它的实现是在 %SystemRoot%/System32/wininet.dll 中,Delphi 调用声明在 WinInet.pas 中,其 API 声明如下:
BOOL InternetCheckConnection(
IN LPCSTR lpszUrl,
IN DWORD dwFlags,
IN DWORD dwReserved
);
  参数的意义是:
lpszUrl:需要测试能否建立连接的 URL 地址,可以为空;
dwFlags:目前只能是 FLAG_ICC_FORCE_CONNECTION(这个常量 Delphi 中没有声明,其值为 $00000001);
dwReserved: 目前只能为 0。
  调用的说明:
  如果 lpszUrl 是非空的,Windows 从中解析出 Host 名然后 Ping 这个指定的 Host。如果 lpszUrl 是空的,并且 WinInet 内部服务器的 database 中有一个关于最近的 Server 的纪录,Windows 就从这条纪录中解析出 Host 名然后 Ping 它。如果能够成功的连接返回True,否则返回 False;
  以下是一个判断当前计算机是否联网的例子:
procedure TForm1.Button1Click(Sender: TObject);
begin
if InternetCheckConnection('http://www.yahoo.com/', 1, 0) then
edit1.text:= 'Connected'
else
edit1.text:= 'Disconnected';
end;

  通过上述的方法只能检测出当前计算机是否物理联网,不能确定是否能够实现获得 Internet 服务,即是否能和 ISP 进行 Internet 连接。这时可以通过另一个 Win32 Internet(WinInet) 函数 InternetQueryOption 来检测;
  这个函数的功能是查询指定 Internet 句柄的状态、选项。 API 声明如下:
BOOL InternetQueryOption(
IN HINTERNET hInternet,
IN DWORD dwOption,
OUT LPVOID lpBuffer,
IN OUT LPDWORD lpdwBufferLength
);
  参数的意义是:
hInternet:查询对象的 Internet 句柄(全局查询时为 nil),
dwOption:查询的项目;
lpBuffer:返回的查询结果;
lpdwBufferLength:查询结果的字节长度(包括 IN 和 OUT);
  查询成功返回 True,否则返回 False;
  我们要查询当前计算机的 Internet 连接状态时可以使用查询项目 INTERNET_OPTION_CONNECTED_STATE,
  得到的 ConnectState 返回值可能是以下值的一个或几个值之和:
INTERNET_STATE_CONNECTED :$00000001 连接状态;
INTERNET_STATE_DISCONNECTED :$00000002 非连接状态(和 INTERNET_STATE
_CONNECTED 对应);
INTERNET_STATE_DISCONNECTED_BY_USER :$00000010 用户请求的非连接状态
INTERNET_STATE_IDLE :$00000100 连接状态,并且空闲
INTERNET_STATE_BUSY :$00000200 连接状态,正在响应连接请求
  以下是一个判断当前计算机是否可以获得 Internet 服务的例子:
function TForm1.CheckOffline: boolean;
var
ConnectState: DWORD;
StateSize: DWORD;
begin
ConnectState:= 0;
StateSize:= SizeOf(ConnectState);
result:= false;
if InternetQueryOption(nil, INTERNET_OPTION_CONNECTED_STATE, @ConnectState,
StateSize) then
if (ConnectState and INTERNET_STATE_DISCONNECTED) <> 2 then
result:= tru
e;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if CheckOffline then
edit1.text:= 'Connect To ISP'
else
edit1.text:= 'Disconnect To ISP';
end;

  说明:InternetQueryOption 函数的检测结果只能表明当前的 Internet 设置是可用的,并不能表示计算机一定能访问 Internet,例如网线掉了……要想检测当前计算机是否能够获得 Internet 服务了必须两个函数结合起来使用。
  以上程序在 Win2000, Delphi5.0 下调试通过。
 
TO cztwf:
在CSDN上也是你告诉我的吧?:)
可是我以前的程序只用了第一个函数就可以正常运行啊,我只是想问为什么现在程序没有改,
程序就出错了?并且错误的原因就是那个函数?
 
使用Build 重新编译,不要使用Compile
 
wbtvc,
我一直用它编译的啊,试过N遍了,还是不行,到底是什么原因呢?
原因??????????????谁告诉我?
 
两次提示都是系统DLL,说名还是系统的问题,我在DELPHI自带的WIN SDK HELP中找不到
这个函数的信息,说明它还是比较新的,可能是IE或者说DLL版本有关,具体原因不好说;
 

Similar threads

D
回复
0
查看
877
DelphiTeacher的专栏
D
D
回复
0
查看
845
DelphiTeacher的专栏
D
D
回复
0
查看
795
DelphiTeacher的专栏
D
后退
顶部