以下代码中,将MSWinsock.Winsock.1 改成 MSWinsock.Winsock
运行照样正常,为什么呢?
难道类名可以这样随意写吗?
LOCAL ipsocket
ipsocket=CREATEOBJECT("MSWinsock.Winsock.1")
IF TYPE("ipsocket")="O"
WITH ipsocket &&as MSWinsockLib.Winsock
ipaddress=.LocalIP
localhost=.LocalHostName
ENDWITH
MESSAGEBOX("你的IP地址是:"+ipaddress+CHR(13)+CHR(10)+"你的服务器名是:"+localhost)
ELSE
MESSAGEBOX("系统未装winsock控件")
ENDIF
RELEASE ipsocket
------解决方案--------------------------------------------------------
严格的写法应该是:
MSWinsock.Winsock.1
------解决方案--------------------------------------------------------
后面那个数,通常是该控件的设计版本号,是否添加一般要根据具体情况来定。
部分这类 COM 控件随着时间的推移,版本号会不断变化,功能也在逐渐增加;大部分是向下兼容的,但也会有例外;如果不加版本号标识,vfp 会到注册表中搜索来找到合适的版本,通常是控件安装时自动设置的,一般是最新的那个;这样你不需要更改创建实例对象处的代码,程序就可以使用新版本提供的功能,另一个好处是只要用户机器上安装了任意一个兼容版本,你的程序都能运行。但如果新版本与老版本不兼容,则这种缺省搜索就可能导致运行不正常。好在 MS 及绝大部分的软件厂商都是保持向下兼容的。打个比方,一般我们双击 bmp 文件,系统会调用“画图”程序来打开它,但如果你安装了 ACDSee,系统就会改用 ACDSee 来显示图片,这就相当于你没有指定版本号,系统从注册表中自动搜索缺省关联。
这类控件最常见的是 MS 用于处理 XML 资料的 DOM 控件,短短几年时间就已经先后发布了 2.0, 2.6, 3.0, 4.0, 5.0 及最新的 6.0 等多个版本,通常他们同时存在于我们的电脑中,如果你只使用了最基本的功能,使用
oo = NewObject( 'MSXML2.DOMDocument ')
来创建即可,用户无论安装那种版本都可以;但如果你的程序使用了 6.0 版的某一特性,则应该强制使用版本标识,就像这样:
oo = NewObject( 'MSXML2.DOMDocument.6.0 ')