关于使用winsock的疑惑,为何表单中加入控件可以,可是用代码创建就不行呢?关于使用winsock的疑惑,为何表单
关于使用winsock的疑惑,为何表单中加入控件可以,可是用代码创建就不行呢?
关于使用winsock的疑惑,为何表单中加入控件可以,可是用代码创建就不行呢?
我用以下代码创建winsock对象,在开发的机器上一切正常,但是将程序放在没有安装vfp的机器上,运行时失败
ox=Createobject("MSwinsock.Winsock")
失败的提示是授权原因,具体的提示我记不清了,反正是未授权的意思。
我怀疑是控件注册的问题,将winsock重新注册,也不行,看来不是注册的问题了。
我再次回到装有vfp的机器上,将代码创建winsock对象的方法去除,在表单上放上一个winsock控件,编译成exe再放到另一台机器上(就是刚才报错的机器上)运行,却成功执行了。这也证明,那台机器上的winsock控件的注册是一点问题也没有的。
我不明白这是为什么?
我又想到另一种测试办法,我测试vbs文件能否正常执行,发现,那台机器上,无法正常执行下面的代码,就是vbs文件中的代码:
VBScript codeDim WSSet WS=CreateObject("MSWinsock.Winsock")IPAddress=WS.LocalIPMsgBox "Local IP=" & IPAddressMsgBox "Local IP=" & ws.localhostname
[解决办法]MS 很多控件都有这种设计/运行时授权的限制,要动态创建这些对象,运行的机器上必须有授权许可,而拖入表单中的控件已携带了授权许可,所以不需要。把下列内容保存到一个 vbctrls.reg 文件中,然后双击它导入注册表,即可拥有动态创建时的授权许可:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Licenses]
@="Licensing: Copying the keys may be a violation of established copyrights."
[HKEY_CLASSES_ROOT\Licenses\12B142A4-BD51-11d1-8C08-0000F8754DA1]
@="aadhgafabafajhchnbchehfambfbbachmfmb"
[HKEY_CLASSES_ROOT\Licenses\190B7910-992A-11cf-8AFA-00AA00C00905]
@="gclclcejjcmjdcccoikjlcecoioijjcjnhng"
[HKEY_CLASSES_ROOT\Licenses\1F3D5522-3F42-11d1-B2FA-00A0C908FB55]
@="gcfjdjecpchcncdjpdejijgcrdoijjfcieod"
[HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d]
@="mlrljgrlhltlngjlthrligklpkrhllglqlrk"
[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
@="kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
[HKEY_CLASSES_ROOT\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905]
@="gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"
[HKEY_CLASSES_ROOT\Licenses\4F86BADF-9F77-11d1-B1B7-0000F8753F5D]
@="iplpwpnippopupiivjrioppisjsjlpiiokuj"
[HKEY_CLASSES_ROOT\Licenses\57CBF9E0-6AA7-11cf-8ADB-00AA00C00905]
@="aahakhchghkhfhaamghhbhbhkbpgfhahlfle"
[HKEY_CLASSES_ROOT\Licenses\6FB38640-6AC7-11cf-8ADB-00AA00C00905]
@="gdjkokgdldikhdddpjkkekgknesjikdkoioh"
[HKEY_CLASSES_ROOT\Licenses\72E67120-5959-11cf-91F6-C2863C385E30]
@="ibcbbbebqbdbciebmcobmbhifcmciibblgmf"
[HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9]
[HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9\11.0]
[HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9\11.0\Retail]
@="sbbcdcprktpjtapmmfdacmupasbhscddncgp"
[HKEY_CLASSES_ROOT\Licenses\78E1BDD1-9941-11cf-9756-00AA00C00908]
@="yjrjvqkjlqqjnqkjvprqsjnjvkuknjpjtoun"
[HKEY_CLASSES_ROOT\Licenses\7C35CA30-D112-11cf-8E72-00A0C90F26F8]
@="whmhmhohmhiorhkouimhihihwiwinhlosmsl"
[HKEY_CLASSES_ROOT\Licenses\80E80EF0-DBBE-11D0-BCE2-00A0C90DCA10]
@="qijimitpmpnpxplpvjnikpkpqoxjmpkpoivj"
[HKEY_CLASSES_ROOT\Licenses\899B3E80-6AC6-11cf-8ADB-00AA00C00905]
@="wjsjjjlqmjpjrjjjvpqqkqmqukypoqjquoun"
[HKEY_CLASSES_ROOT\Licenses\9E799BF1-8817-11cf-958F-0020AFC28C3B]
@="uqpqnqkjujkjjjjqwktjrjkjtkupsjnjtoun"
[HKEY_CLASSES_ROOT\Licenses\B1EFCCF0-6AC1-11cf-8ADB-00AA00C00905]
@="qqkjvqpqmqjjpqjjvpqqkqmqvkypoqjquoun"
[HKEY_CLASSES_ROOT\Licenses\BC96F860-9928-11cf-8AFA-00AA00C00905]
@="mmimfflflmqmlfffrlnmofhfkgrlmmfmqkqj"
[HKEY_CLASSES_ROOT\Licenses\BEA2ED97-562A-4510-974C-C4F20AE429AD]
"1"=hex:d2,00,57,01,18,01,7e,01,de,00,77,01,a5,00,9a,00,e1,00,16,01,9d,00,f1,\
00,4e,01,73,00,30,01,5c,00,23,01,c5,00
[HKEY_CLASSES_ROOT\Licenses\CDE57A55-8B86-11D0-b3C6-00A0C90AEA82]
@="ekpkhddkjkekpdjkqemkfkldoeoefkfdjfqe"
[HKEY_CLASSES_ROOT\Licenses\CEDD4F80-B43C-11cf-837C-00AA00573EDE]
@="gxwaezucfyqpwjgqbcmtsncuhwsnyhiohwxz"
[HKEY_CLASSES_ROOT\Licenses\DC4D7920-6AC8-11cf-8ADB-00AA00C00905]
@="iokouhloohrojhhhtnooiokomiwnmohosmsl"
[HKEY_CLASSES_ROOT\Licenses\E32E2733-1BC5-11d0-B8C3-00A0C90DCA10]
@="kmhfimlflmmfpffmsgfmhmimngtghmoflhsg"
[HKEY_CLASSES_ROOT\Licenses\ED4B87C4-9F76-11d1-8BF7-0000F8754DA1]
@="knlggnmntgggrninthpgmnngrhqhnnjnslsh"
[解决办法]
在开发的机器上(安装了VFP)运行正常,而在没安装VFP的机子运行却提示“类别未授权使用”
因为开发的机子安装VFP时,取得了OCX授权,而在未安装VFP的机器上没有取得OCX授权
使用纯代码建立winsock对象,对于开发的那台机器没问题,别的机器都用不了。
所以这不是ocx的注册问题,而是ocx的授权问题。
解决方法:
对于mswinsck.ocx来说,如果想不报错,请不要用纯代码来建立winsock对象,改用可视化,即把这个ocx拖到表单上。
因为可视化建立的winsock连编成EXE时会自动带上授权密钥.