找不到mswinsock.winsock类定义

xilaianzxsc 2017-09-15 10:20:43
VFP9 +SQL2000

*----我想获取公司局域网(即:内网)的IP地址.
IPSocket=CREATEOBJECT("MSWinsock.Winsock")
ip_address = IPSocket.LocalIP &&C型 ,且前后无空格。

如果在本机上(有VFP环境)运行. 不出错
在其他电脑上运行,出错提示为 "找不到mswinsock.winsock类定义"

是不是少一个文件? 文件在哪?
望老师指导,谢谢
...全文
1030 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xilaianzxsc 2017-09-16
  • 打赏
  • 举报
回复
谢谢二位老师的回复 原来这个问题,还有一定的难度的. 我再自己琢磨一下
xuzuning 2017-09-16
  • 打赏
  • 举报
回复
缺少 MSWinsock.ocx 文件,请与可执行程序一并拷贝,并以手工或编程方式注册 vfp 提供的 sock 不能完美的处理二进制数据,建议找一个第三方控件
都市夜猫 2017-09-15
  • 打赏
  • 举报
回复
按下列顺序检查:
1. 客户机上是否存在 mswinsck.ocx 文件,可直接到 system32 文件夹查找(64 位操作系统要找 SysWOW64 文件夹),或者用全盘搜索来查找。找不到就从你的开发机上复制过去,我2楼说的,仅仅是告诉你这个控件对应哪个文件。
2. 客户机上该控件是否已注册,也可以不管3721,找到后用 regsvr32 注册它
3. 如果经上两步后,仍报找不到类定义,可复制 http://blog.csdn.net/dkfdtf/article/details/2907009 中的内容,另存为 aaa.reg,复制到客户机器上,然后双击导入注册表。

由于你采用的是 CreateObject 方法创建对象,所以需要设计时授权(微软的大部分控件都需要),有可能是客户机上没有此控件的设计授权。连接中给出的有很多控件的授权,对应 winsock 的是 guid 为 2c49f800-c2dd-11cf-9ad6-0080c7e7b78d 的项,"mlrljgrlhltlngjlthrligklpkrhllglqlrk" 就是 winsock 的授权码)

对少量的客户手工做这些事问题不大,如果是一个商品化软件,你就没法预计客户的水平,是否有能力完成这些步骤,况且注册控件,导入注册表这类操作,操作系统和防毒软件都会有限制。之所以商品化软件需要做安装包,跟此有很大关系,只要打包时包含了这些控件(对用 CreateObject 动态创建的控件,在做安装包时,同样需要指定要写入哪些注册表项目),安装包就可以在安装时自动完成这些步骤。

如果你钟爱 xcopy 的发布方式,最好对所有需要用到的控件,都创建一个包装类,哪怕你什么都不改,仅将这个控件放入你的类库,再用这个包装类 CreateObject('包装类中的类名') 动态创建对象时,就不再需要设计时授权了,不会再遇到需要第三步这样的问题。
xilaianzxsc 2017-09-15
  • 打赏
  • 举报
回复
报告夜猫老师,上述方法设置后,我也能显示出如下图的界面。

然后,重新编译文件。

现结论是:与原来一样。(开发机上,正常运行。 其他机上,仍然是原有出错提示)

都市夜猫 2017-09-15
  • 打赏
  • 举报
回复
在你的开发机上打开对象浏览器

找到并勾选 Winsock 控件

选中根节点,下面可看到是哪个文件

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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