ScriptControl控件在运行时是否产生一个新的进程

求助:ScriptControl控件在运行时是否产生一个新的进程?
ScriptControl控件在运行代码时是否产生一个新的进程?

------解决方案--------------------
不会,因为ScriptControl也是ActiveX控件,ActiveX包括EXE、有UI的控件、无UI的组件三种类型,后两种往往可以统称为ActiveX组件,除了Exe可以有独立进程和线程外(所以VB常用ActiveX EXE实现多线程),后丙者都与宿主处于同一个线程,当然也就是没新的进程的说法了。ScriptControl实际上是调用了Windows Script Host组件。
------解决方案--------------------
如果脚本中有释放鼠标和键盘控制,且VB里使用了DoEvents的话,可以用动态加载和卸载ScriptControl控件的办法来中断脚本运行,动态加载的progid为MSScriptControl.ScriptControl.1,此外还要取消工程属性里“删除有关未使用的ActiveX控件的信息”选项。
------解决方案--------------------
先声明,我的vb技术不是很好

这里面有个比较麻烦的事情,scriptcontrol这个控件是多线程的

正好最近一段儿我正在做脚本解释器,所以可以分享一下我的研究成果

HRESULT GetCurrentScriptThreadID(
    SCRIPTTHREADID *pstidThread  // receives scripting thread identifier
);

Retrieves a scripting-engine-defined identifier for the currently executing thread. The identifier can be used in subsequent calls to script thread execution-control methods such as the IActiveScript::InterruptScriptThread method. 

实际通过手册中会发现 微软的脚本引擎 是多线程操作(如果用线程中止的技术不知道vb6是否支持,貌似

vb6不知道多线程的api)

通常来说脚本引擎 可以依靠状态来解决这样的问题(刚才我想到的方案,我自己的脚本引擎正在支持这个方式)

HRESULT SetScriptState(
    SCRIPTSTATE ss  // identifier of new state
);

Puts the scripting engine into the given state. This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface. 

typedef enum tagSCRIPTSTATE {
    SCRIPTSTATE_UNINITIALIZED = 0,
    SCRIPTSTATE_INITIALIZED   = 5,
    SCRIPTSTATE_STARTED       = 1,
    SCRIPTSTATE_CONNECTED     = 2,
    SCRIPTSTATE_DISCONNECTED  = 3,
    SCRIPTSTATE_CLOSED        = 4
} SCRIPTSTATE;

Contains named constant values that specify the state of a scripting engine. This enumeration is used by the IActiveScript::GetScriptState, IActiveScript::SetScriptState, and IActiveScriptSite::OnStateChange methods. 

不知道这个方式能不能对楼主有所帮助,我现在试验不了vb6的代码,如果换成vc非托管我没什么问题

用scriptcontrol的架构方案我很好奇,这个正是我现在在做的,不知道楼主为什么选用这个方案


------解决方案--------------------
在 windows 脚本技术手册的最下面就有

script56.chm 这个我前一段儿 又研究了一下, 我最早看这个手册都是6年前的事情了,一直都是

用来当作脚本语法的帮助文档

错误其实也有错误处理的上下文机制的,其实所有的脚本引擎都是一样的,脚本运行时是有运行时上下文

对象的,我自己的脚本引擎支持 多种 事件的注入 而达到高扩展的目的,一些思想也是借鉴了微软的脚本

引擎的思想
------解决方案--------------------
HRESULT InterruptScriptThread(
    SCRIPTTHREADID   stidThread,  // identifier of thread
    const EXCEPINFO *pexcepinfo,  // receives error information
    DWORD dwFlags
);