Microsoft.VisualBasic.Vsa.VsaEngine这个类过时了且不支持win7 64位,怎么办?

以有涯求无涯 2017-09-26 10:25:29
public class ZYVBScriptEngine : Microsoft.VisualBasic.Vsa.VsaEngine
{
//Microsoft.VisualBasic.Vsa.VsaEngine myEngine = new Microsoft.VisualBasic.Vsa.VsaEngine();
EMRTextDocumentVsaSite myVsaSite = new EMRTextDocumentVsaSite();

private System.Collections.Hashtable myMethodTable = new System.Collections.Hashtable();

public ZYTextDocument myOwnerDocument = null;
//public ZYVBSystem EMRVB = new ZYVBSystem();

private string strScriptText = null;
/// <summary>
/// 用户代码模块
/// </summary>
private Microsoft.Vsa.IVsaCodeItem myCodeItem = null;
/// <summary>
/// 系统代码模块
/// </summary>
private Microsoft.Vsa.IVsaCodeItem myGlobalCodeItem = null;

/// <summary>
/// 是否显示过了用户界面
/// </summary>
public bool HasUserInterface = false;

/// <summary>
/// 事件参数对象
/// </summary>
public ZYVBEventObject EventObj
{
get{ return myVsaSite.EventObject ;}
}
/// <summary>
/// 本脚本对象所在的文档对象
/// </summary>
public ZYTextDocument OwnerDocument
{
get{ return myOwnerDocument ;}
set{ myOwnerDocument = value ;}
}
/// <summary>
/// 添加脚本
/// </summary>
/// <param name="strScript"></param>
public void AppendScript( string strScript)
{
if( strScriptText == null)
strScriptText = strScript ;
else
strScriptText = strScriptText + strScript;
}

/// <summary>
/// 脚本代码字符串
/// </summary>
public string ScriptText
{
get{ return strScriptText ;}
set{ strScriptText = value;}
}

/// <summary>
/// 获得已编译的脚本程序中指定名称的方法对象,本函数不区分方法名称的大小写
/// </summary>
/// <param name="strName">方法名称,不区分大小写</param>
/// <returns>方法对象,若为找到则返回空引用</returns>
public System.Reflection.MethodInfo GetScriptMethod( string strName )
{
if( strName != null)
{
strName = strName.Trim().ToLower();
if( strName.Length > 0 )
return myMethodTable[ strName ] as System.Reflection.MethodInfo ;
}
return null;
}

/// <summary>
/// 执行指定的方法
/// </summary>
/// <param name="myMethod">方法对象</param>
/// <param name="obj">对象</param>
/// <param name="Parameters">方法参数</param>
/// <returns>方法返回值</returns>
public object InvokeScriptMethod( System.Reflection.MethodInfo myMethod , object obj , object[] Parameters)
{
if( myMethod == null)
return null;
try
{
if( myOwnerDocument != null)
{
myOwnerDocument.BeginUpdate();
myOwnerDocument.BeginContentChangeLog();
}
object objReturn = null;
try
{
ZYErrorReport.Instance.DebugPrint("执行脚本 " + myMethod.Name );
objReturn = myMethod.Invoke( obj , Parameters );
}
catch(Exception ext2)
{
string strMsg = "运行脚本[" + myMethod.Name + "]错误!\r\n" + ext2.ToString() ;
if( myOwnerDocument == null || myOwnerDocument.Info.ShowScriptError )
{
System.Windows.Forms.MessageBox.Show(null, strMsg , "脚本错误" , System.Windows.Forms.MessageBoxButtons.OK , System.Windows.Forms.MessageBoxIcon.Error );
HasUserInterface = true;
}
ZYErrorReport.Instance.DebugPrint( strMsg );
}
if( myOwnerDocument != null)
{
myOwnerDocument.EndContentChangeLog();
myOwnerDocument.EndUpdate();
}
return objReturn ;
}
catch(Exception ext)
{
ZYErrorReport.Instance.SourceException = ext ;
ZYErrorReport.Instance.SourceObject = this ;
ZYErrorReport.Instance.MemberName = "InvokeScriptMethod";
ZYErrorReport.Instance.UserMessage = "运行脚本[" + myMethod.Name + "]错误!";
ZYErrorReport.Instance.ShowErrorDialog();
HasUserInterface = true;
}
return null;
}

/// <summary>
/// 执行指定名称的方法
/// </summary>
/// <param name="strMethodName">方法名称</param>
/// <param name="obj">对象</param>
/// <param name="Parameters">方法参数</param>
/// <returns>方法返回值</returns>
public object InvokeScriptMethod( string strMethodName , object obj , object[] Parameters)
{
return InvokeScriptMethod( this.GetScriptMethod( strMethodName) , obj , Parameters );
}

/// <summary>
///向脚本引擎添加引用
/// </summary>
/// <param name="strDllName">引用使用的DLL文件名</param>
private void AddRefrence( string strDllName )
{
try
{
ZYErrorReport.Instance.DebugPrint("向脚本引擎添加引用" + strDllName );
Microsoft.Vsa.IVsaReferenceItem RefItem ;
RefItem = this.Items.CreateItem(strDllName ,Microsoft.Vsa.VsaItemType.Reference , Microsoft.Vsa.VsaItemFlag.None ) as Microsoft.Vsa.IVsaReferenceItem ;
RefItem.AssemblyName = strDllName ;
}
catch(Exception ext)
{
ZYErrorReport.Instance.SourceException = ext ;
ZYErrorReport.Instance.SourceObject = this ;
ZYErrorReport.Instance.UserMessage = "向脚本引擎添加引用 " + strDllName + " 错误";
ZYErrorReport.Instance.MemberName = "ZYVBScriptEngine.AddRefrence";
ZYErrorReport.Instance.ReportError();
}
}
/// <summary>
/// 向脚本添加全局对象
/// </summary>
/// <param name="strName">全局对象的名称</param>
/// <param name="strTypeName">全局对象的类型名称</param>
private void AddGlobalItem( string strName , string strTypeName)
{
Microsoft.Vsa.IVsaGlobalItem myGolItem = this.Items.CreateItem(strName,Microsoft.Vsa.VsaItemType.AppGlobal , Microsoft.Vsa.VsaItemFlag.None ) as Microsoft.Vsa.IVsaGlobalItem ;
myGolItem.TypeString = strTypeName ;
}

public ZYVBScriptEngine()
{
// 初始化脚本引擎

try
{this.RootMoniker = "zyinc://ZYTextDocument//script";

this.Site = myVsaSite ;

this.InitNew();
}
catch (Exception e)
{

System.Windows.Forms.MessageBox.Show("61"+e.Message.ToString());
}


this.RootNamespace = "ZYTextDocumentLib";
this.GenerateDebugInfo = true;
//myVsaSite.EventObject = null;


// 添加标准引用库
AddRefrence("system.dll");
AddRefrence("mscorlib.dll");
AddRefrence("system.drawing.dll");
AddRefrence("system.xml.dll");
AddRefrence("system.data.dll");
AddRefrence("system.windows.forms.dll");
AddRefrence("Microsoft.VisualBasic.dll");
//AddRefrence(System.Reflection.Assembly.GetAssembly( typeof(ZYTextDocument)).GetName().FullName );// . .Location);

// 添加全局对象
AddGlobalItem("document" ,"object");//ZYTextDocumentLib.ZYTextDocument");
AddGlobalItem("eventobj" ,"object");//"ZYTextDocumentLib.ZYVBEventObject");
AddGlobalItem("emrvb" ,"object");//"ZYTextDocumentLib.ZYVBSystem");
AddGlobalItem("dbconnection" ,"object");//"ZYTextDocumentLib.ZYVBConnection");

//AddGlobalItem("eventsource" ,"Object");
// 添加用户代码模块
myCodeItem = this.Items.CreateItem("UserCode",Microsoft.Vsa.VsaItemType.Code , Microsoft.Vsa.VsaItemFlag.None) as Microsoft.Vsa.IVsaCodeItem ;
// 添加系统代码模块
myGlobalCodeItem = this.Items.CreateItem("GlobalCode",Microsoft.Vsa.VsaItemType.Code , Microsoft.Vsa.VsaItemFlag.None) as Microsoft.Vsa.IVsaCodeItem ;

}

/// <summary>
/// 设置系统脚本代码
/// </summary>
/// <param name="strCode"></param>
public void SetGolbalScriptCode(string strCode)
{
myGlobalCodeItem.SourceText = @"Option Strict Off
Imports System
Imports System.Xml
Imports System.Data
Imports System.Windows.Forms
Imports System.Drawing
Imports Microsoft.VisualBasic
'Imports ZYCommon
'Imports ZYTextDocumentLib
Module GlobalCode
"
+ strCode +
"\r\nEnd Module";
}

/// <summary>
/// 编译脚本
/// </summary>
/// <returns>编译是否成功</returns>
public bool CompileEMRVB()
{
if( StringCommon.isBlankString( strScriptText ))
{
this.StopScript();
return false;
}
// 添加脚本代码
myCodeItem.SourceText =
@"Option Strict Off
Imports System
Imports System.Xml
Imports System.Data
Imports System.Windows.Forms
Imports System.Drawing
Imports Microsoft.VisualBasic
'Imports ZYCommon
'Imports ZYTextDocumentLib
Module UserCode
"
+ strScriptText +
"\r\nEnd Module";

// 编译并运行代码
if( this.Compile())
{
ZYErrorReport.Instance.DebugPrint("编译EMRVB代码成功,代码为\r\n" + myCodeItem.SourceText ) ;
return true;
}
else
{
ZYErrorReport.Instance.DebugPrint("编译EMRVB代码失败,代码为\r\n" + myCodeItem.SourceText ) ;
return false;
}
}




//*********************************************************************************************
//*********************************************************************************************
//*********************************************************************************************
//*********************************************************************************************

/// <summary>
/// EMRVB脚本程序运行环境
/// </summary>
public class EMRTextDocumentVsaSite : Microsoft.Vsa.IVsaSite
{
private System.Collections.Hashtable myObjects = new System.Collections.Hashtable();
/// <summary>
/// 是否显示错误消息框
/// </summary>
public bool ShowErrorMsg = true;
/// <summary>
/// 文档对象
/// </summary>
public ZYTextDocument Document = null;
/// <summary>
/// 事件对象
/// </summary>
public ZYVBEventObject EventObject = new ZYVBEventObject();
/// <summary>
/// EMRVB脚本程序运行环境
/// </summary>
public ZYVBSystem EMRVB = null;
/// <summary>
/// 数据库连接对象
/// </summary>
public ZYVBConnection DBConnection = null;
/// <summary>
/// 内部的全局对象的列表
/// </summary>
public System.Collections.Hashtable Objects
{
get{ return myObjects;}
}
public bool OnCompilerError(Microsoft.Vsa.IVsaError error)
{
string strMsg = "第 " + Convert.ToString( error.Line - 10 ) + " 行脚本发生编译错误:" + error.Description + "\r\n该行代码为:" + error.LineText.Trim() ;
ZYErrorReport.Instance.DebugPrint("编译错误:" + strMsg );
if( ShowErrorMsg )
System.Windows.Forms.MessageBox.Show( null , strMsg ,"编译错误" , System.Windows.Forms.MessageBoxButtons.OK ,System.Windows.Forms.MessageBoxIcon.Error ) ;
return false;
}

public void GetCompiledState(out byte[] pe, out byte[] debugInfo)
{
pe = null;
debugInfo = null;
}

#endregion
}//public class EMRTextDocumentVsaSite


}
...全文
739 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ktfnalra 2019-07-22
  • 打赏
  • 举报
回复
改成x86生成
dy00544 2017-09-27
  • 打赏
  • 举报
回复
引用 1 楼 Learn_change_myself 的回复:
最近在维护一个医院his系统,其中有一个电子病历编辑器,一直无法打开,打开就报异常:****引发了“System.Runtime.InteropServices.COMException”类型的异常,经过我的各种找原因,最后发现,该电子病历的这个类是继承了一个已过时的基类:public class ZYVBScriptEngine : Microsoft.VisualBasic.Vsa.VsaEngine ,这下可怎么办,有没有可以替代的类用来继承?如果不行的话这个电子病历编辑器就要换了,很麻烦的。
要么就不要升级操作系统啊。 要么叫客户出钱重新设计呗。 很简单啊。
以有涯求无涯 2017-09-26
  • 打赏
  • 举报
回复
最近在维护一个医院his系统,其中有一个电子病历编辑器,一直无法打开,打开就报异常:****引发了“System.Runtime.InteropServices.COMException”类型的异常,经过我的各种找原因,最后发现,该电子病历的这个类是继承了一个已过时的基类:public class ZYVBScriptEngine : Microsoft.VisualBasic.Vsa.VsaEngine ,这下可怎么办,有没有可以替代的类用来继承?如果不行的话这个电子病历编辑器就要换了,很麻烦的。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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