vb.net 运行ScriptControl 会出现异常?
vb.net吧
全部回复
仅看楼主
level 2
Q22Rt 楼主
系统是Windows7 64位 旗舰版
在Visual Studio 2012上用.net framework 2.0 (注意这个) 写的:
声明:
Public sctl
Form1_Load里面的:
sctl = CreateObject("MSScriptControl.ScriptControl")
生成的时候报错:
无法创建此Active控件
后来,想到了引用,于是就在引用里面勾选了ScriptControl 1.0
但是问题没有解决
于是,我尝试往工具箱里面添加了一个COM:ScriptControl
添加成功了,于是我在Form1里面添加了这个控件
名称是:AxScriptControl1
我先没输任何代码,但是生成时又报错:
"检索 COM 类工厂中 CLSID 为 {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} 的组件时失败,原因是出现以下错误: 80040154。"
如此高深的错误岂是吾辈菜鸟能看懂的?
但是我之前编计算器的时候用过这个控件,没有异常
我怀疑是框架的问题,于是用.net framework 4.5.1 新建了一个项目,
不做任何其他修改,只有六行代码:
Public Class Form1
Public sctl
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
sctl = CreateObject("MSScriptControl.ScriptControl")
End Sub
End Class
生成成功了,不过我还没有对生成之后的这个程序关于ScriptControl做任何测试
不过我发现改框架这个方法可行
于是我就在原来出问题的项目文件属性里把框架改成.net framework 4.5.1,并且重启程序
当然,我还别出心裁把原有的OnErrorGoto语句去掉了
问题确实解决了,生成成功了,于是我试着降低.net framework版本
当我降到4.0时,生成的情况变成:没有任何报错,也没有任何反应(程序压根没出来)
当我降到3.0时,就已经无法生成了
于是我继续使用4.5.1,但是我尝试调用sctl(前面创建的ScriptControl)的Eval方法时,
就会报错,提示:未设置对象变量或 With 块变量。
很明显,sctl并没有被创建为ScriptControl,但是没有报错
我把OnErrorGoto又加了回去,更诡异的事情发生了(GotoE1):
E1被执行了,前面是有ExitSub的
于是我在E1里面Msgbox错误号,出来429,表示Active控件不能被创建
我又把框架改成2.0,这时候去掉OnErrorGoto语句也生成成功了
但是仍旧出现了上面(4.5.1)同样的问题
现在需要加觉得问题就是:
1、能否在2.0下以这种方式创建ScriptControl?如果能,如何创建?
2、为何在两个框架相同项目中,使用同样的方法创建ScriptControl会得到不同的结果?
3、为何生成时没有出现任何错误,但是使用OnErrorGoto却可以捕捉到错误?
感激不尽!
2014年04月29日 12点04分 1
level 2
Q22Rt 楼主
补充:
新建一个4.5.1项目,包含如下代码:
Public Class Form1
Public sctl
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
sctl = CreateObject("MSScriptControl.ScriptControl")
Msgbox(sctl.eval("1+1"))
End Sub
End Class
也就是比上面的4.5.1测试代码多出一个Msgbox
但是运行程序之后,Msgbox没有反应
于是添加OnErrorGoto语句,并且Msgbox(Err.Number)
运行后弹出
Msgbox:-2147467259
这个很明显是错误代码
2014年04月29日 12点04分 2
level 9
你能确定写的这个CreateObject里面的MSScriptControl.ScriptControl没问题吗
用对象浏览器搜ScriptControl在net4.0里搜到的位置是System.Web.UI.ScriptControl
2014年04月29日 12点04分 3
level 1
工程改成x86调试,别用x64,ScriptControl不支持x64应用程序调用。
2018年02月08日 09点02分 4
level 1
还有,可以不要引用ScriptControl,直接用CreateObject("ScriptControl")
因为系统版本下安装的对应ocx可能COM接口的GUID不一样,到注册表搜索ScriptControl你就知道了。
2018年02月08日 12点02分 5
1