一种解决x64位操作系统环境访问32位控件的通用方法

文档序号:6593833阅读:2996来源:国知局
专利名称:一种解决x64位操作系统环境访问32位控件的通用方法
技术领域
本发明涉及一种计算机应用技术领域,具体地说是采用Remoting的分布式处理方式和Windows服务实现不同应用程序域间通信,在异构系统中解决了 x64位进程调用32位进程组件的问题,或是一种解决x64位操作系统环境访问32位控件的通用方法。
背景技术
随着企业信息化的发展,企业间无论硬件环境还是软件环境都趋向于多样化,操作系统x64位环境也越来越普遍,但x64位进程下访问32位控件在我们ERP系统中应用场景也越来越广泛 。通用的跨进程通信方式在Windows服务中注册32位远程对象来完成32位进程组件的调用方法就是在此情况下实现,用于满足不同企业复杂软硬件环境的需要。

发明内容
本发明的目的是提供一种解决x64位操作系统环境访问32位控件的通用方法。本发明的目的是按以下方式实现的,系统提供调用组件,调用者自定义自己的远程对象,通过客户端调用接口完成远程对象的自动注册,其中服务器端以Windows服务作为常驻进程通过Channel来保持与客户端的通信,具体内容如下:
1)基于Remoting通道通信机制,将服务端封装为32位Windows服务作为常驻进程;
2)将Remote客户端封装为泛型类,调用方可灵活定义远程对象;
3)提供远程对象配置的公共方法,调用方可将自定义的远程对象信息写入制定xml文件中,由服务端统一解析;
4)Remoting中服务器端和客户端都必须通过通道来传递消息,以获得远程对象,具体步骤如下:
1)创建远程对象:
a)由于Remoting传递的对象是以引用的方式,因此所传递的远程对象类必须继承MarshalByRefObject ;
b)在此远程对象中的公共方法中将定义对32位OCX控件的访问操作;
2)创建服务器端:
a)创建32位Windows服务作为服务端宿主进程;
b)注册TCP通道;
c)注册远程对象到通道。采用SingleTon模式;
3)封装客户端调用;
a)注册TCP通道;
b)获取远程对象,采用WellKnown激活模式,要获得服务器端的远程对象,可通过Activator进程的GetObjectO方法来获得,其中参数第一个是远程对象的类型,第二个参数就是服务器端的uri,端口必须和服务器端的端口一致,后面则是服务器定义的远程对象服务名。
本发明的优异效果:
1)面向ERP软件开发人员提供了X64位操作系统中X64位进程调用32位ocx组件的可行方案;
2)调用方使用该方案无需编写Remote服务器端代码,通过简单的客户端调用便可实现x64位进程中调用32位控件的需求;
3)面向ERP软件开发人员提供了x64位操作系统中x64位进程调用32位ocx组件的可行方案;
4)调用方使用该方案无需编写Remote服务器端代码,通过简单的客户端调用便可实现x64位进程中调用32位控件的需求。
具体实施例方式本发明的目的是通过Remoting的通道机制结合32位的Windows服务,解决了 x64操作系统下访问32位OCX控件的问题。Remoting中服务器端和客户端都必须通过通道来传递消息,以获得远程对象。以下以注册TcpChannel为例具体步骤如下:
1)创建远程对象:
a)由于Remoting传递的对象是以引用的方式,因此所传递的远程对象类必须继承MarshalByRefObject
b)在此远程对象中的公共方法中将定义对32位OCX控件的访问操作
2)创建服务器端:
Aa)创建32位Windows服务作为服务端宿主进程;
b)注册TCP通道;
c)注册远程对象到通道。采用SingleTon模式
3)封装客户端调用
a)注册TCP通道;
b)获取远程对象。采用WellKnown激活模式。要获得服务器端的远程对象,可通过Activator进程的GetObject O方法来获得。其中参数第一个是远程对象的类型。第二个参数就是服务器端的uri。端口必须和服务器端的端口一致,后面则是服务器定义的远程对象服务名。
实施例1.开发人员通过在软件实现时调用该组件,实现相应的功能;
2.调用方法如下:
(1)调用CreateRemoteObj()方法将远程对象信息写入到配置文件
(2)调用者自定义远程访问对象,需要继承自MarshalByRefObject接口
(3)客户端调用说明:创建RemoteClient〈T > O对象,然后调用对象方法GetRemoteObj (…)返回自定义远程对象实体,根据需要调用远程对象的相应方法。主要程序组件:
1、远程对象配 置文件< xml version=〃L 0〃 encoding=〃utf_8〃 >
〈RemoteObjectList>
〈RemoteObj enable=〃l〃>
〈!—远程对象名称一>
<0bjTypeName>
</0bjTypeName>
<!—服务端uri—>
<ServerUri>
</ServerUri>
<!—远程对象uri—>
<0bjUri>
</0bjUri>
〈!一通信端口一>
<ChannelPor t>
</ChannelPort>
〈/RemoteObj〉
〈/RemoteObjectList>
公共方法:Public void CreateRemoteObj (string objtypename, stringobjuri,string serveruri)
2、服务器端(读取配置文件节点注册远程对象) public static void Startup ()
{
TcpServerChannel chnl = new TcpServerChannel (port);
ChanneIServices.RegisterChannel(chnl, false);
emotingConfiguration.RegisterWelIKnownServiceType (Type.GetType(objTypeName), objuri, WellKnownObjectMode.Singleton);bRun = true;
while(bRun){ Thread.Sleep(1000); }
}
protected override void OnStop ()
{ bRun = false; }
3.客户端泛型类及公共方法:
Public Class RemoteClient< T >
{
Public T GetRemoteObj (string channelName, string objTypeName, stringserverUri)
{
TcpClientChannel chnl = new TcpClientChannel (channelName, new BinaryClientFormatterSinkProvider());IChannel[] channels = ChannelServices.RegisteredChannels;foreach (IChanneI chn in channels)
{
ChanneIServices.UnregisterChannel(chn);
}
ChanneIServices.RegisterChannel(chnl, false);
T obj= (T) Activator.GetObject(Type.GetType(objTypeName), serverUri);
Return obj;
}
}o实施例:
本发明的方法已经成功试用于浪潮eHR产品的WinForm版本和Web版本的打印功能中,并在实际应用中发挥了良好的效果。本发明可使调用方在x64进程中灵活的调用32位ocx控件,增强了 ERP软件在windows系统下的兼容性,具有良好的应用前景。除说明书所 述的技术特征外,均为本专业技术人员的已知技术。
权利要求
1.一种解决X64位操作系统环境访问32位控件的通用方法,其特征在于系统提供调用组件,调用者自定义自己的远程对象,通过客户端调用接口完成远程对象的自动注册,其中服务器端以Windows服务作为常驻进程通过Channel来保持与客户端的通信,具体内容如下: a)基于Remoting通道通信机制,将服务端封装为32位Windows服务作为常驻进程; b)将Remote客户端封装为泛型类,调用方可灵活定义远程对象; c)提供远程对象配置的公共方法,调用方可将自定义的远程对象信息写入制定xml文件中,由服务端统一解析; d)Remoting中服务器端和客户端都必须通过通道来传递消息,以获得远程对象,具体步骤如下: 1)创建远程对象: a)由于Remoting传递的对象是以引用的方式,因此所传递的远程对象类必须继承MarshalByRefObject ; b)在此远程对象中的公共方法中将定义对32位OCX控件的访问操作; 2)创建服务器端: a)创建32位Windows服务作为服务端宿主进程; b)注册TCP通道; c)注册远程对象到通道,采用SingleTon模式; 3)封装客户端调用; a)注册TCP通道; b)获取远程对象,采用WellKnown激活模式,要获得服务器端的远程对象,可通过Activator进程的GetObjectO方法来获得,其中参数第一个是远程对象的类型,第二个参数就是服务器端的uri,端口必须和服务器端的端口一致,后面则是服务器定义的远程对象服务名。
全文摘要
本发明提供一种解决x64位操作系统环境访问32位控件的通用方法,系统提供调用组件,调用者可以自定义自己的远程对象,通过客户端调用接口完成远程对象的自动注册,其中服务器端以Windows服务作为常驻进程通过Channel来保持与客户端的通信。调用方使用该方案无需编写Remote服务器端代码,通过简单的客户端调用便可实现x64位进程中调用32位控件的需求。
文档编号G06F9/44GK103218231SQ20131014094
公开日2013年7月24日 申请日期2013年4月23日 优先权日2013年4月23日
发明者贺作华, 杜晓东 申请人:浪潮集团山东通用软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1