CN103218231A - 一种解决x64位操作系统环境访问32位控件的通用方法 - Google Patents
一种解决x64位操作系统环境访问32位控件的通用方法 Download PDFInfo
- Publication number
- CN103218231A CN103218231A CN2013101409463A CN201310140946A CN103218231A CN 103218231 A CN103218231 A CN 103218231A CN 2013101409463 A CN2013101409463 A CN 2013101409463A CN 201310140946 A CN201310140946 A CN 201310140946A CN 103218231 A CN103218231 A CN 103218231A
- Authority
- CN
- China
- Prior art keywords
- remote object
- server end
- bit
- service
- client
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供一种解决x64位操作系统环境访问32位控件的通用方法,系统提供调用组件,调用者可以自定义自己的远程对象,通过客户端调用接口完成远程对象的自动注册,其中服务器端以Windows服务作为常驻进程通过Channel来保持与客户端的通信。调用方使用该方案无需编写Remote服务器端代码,通过简单的客户端调用便可实现x64位进程中调用32位控件的需求。
Description
技术领域
本发明涉及一种计算机应用技术领域, 具体地说是采用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进程的GetObject()方法来获得,其中参数第一个是远程对象的类型,第二个参数就是服务器端的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()方法来获得。其中参数第一个是远程对象的类型。第二个参数就是服务器端的uri。端口必须和服务器端的端口一致,后面则是服务器定义的远程对象服务名。
实施例
1. 开发人员通过在软件实现时调用该组件,实现相应的功能;
2. 调用方法如下:
(1)调用CreateRemoteObj()方法将远程对象信息写入到配置文件
(2)调用者自定义远程访问对象,需要继承自MarshalByRefObject接口
(3)客户端调用说明:创建 RemoteClient< T >()对象,然后调用对象方法GetRemoteObj(…)返回自定义远程对象实体, 根据需要调用远程对象的相应方法。
主要程序组件:
1、远程对象配置文件
<?xml version="1.0" encoding="utf-8" ?>
<RemoteObjectList>
<RemoteObj enable="1">
<!--远程对象名称-->
<ObjTypeName>
</ObjTypeName>
<!--服务端uri-->
<ServerUri>
</ServerUri>
<!--远程对象uri-->
<ObjUri>
</ObjUri>
<!—通信端口-->
<ChannelPort>
</ChannelPort>
</RemoteObj>
</RemoteObjectList>
公共方法:Public void CreateRemoteObj(string objtypename,string objuri,string serveruri)
2、服务器端(读取配置文件节点注册远程对象)
public static void Startup()
{
TcpServerChannel chnl = new TcpServerChannel(port);
ChannelServices.RegisterChannel(chnl, false);
emotingConfiguration.RegisterWellKnownServiceType(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, string serverUri)
{
TcpClientChannel chnl = new TcpClientChannel(channelName, new BinaryClientFormatterSinkProvider());
IChannel[] channels = ChannelServices.RegisteredChannels;
foreach (IChannel chn in channels)
{
ChannelServices.UnregisterChannel(chn);
}
ChannelServices.RegisterChannel(chnl, false);
T obj= (T)Activator.GetObject(Type.GetType(objTypeName),serverUri);
Return obj;
}
}。
实施例:
本发明的方法已经成功试用于浪潮eHR产品的WinForm版本和Web版本的打印功能中,并在实际应用中发挥了良好的效果。本发明可使调用方在x64进程中灵活的调用32位ocx控件,增强了ERP软件在windows系统下的兼容性,具有良好的应用前景。
除说明书所述的技术特征外,均为本专业技术人员的已知技术。
Claims (1)
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进程的GetObject()方法来获得,其中参数第一个是远程对象的类型,第二个参数就是服务器端的uri,端口必须和服务器端的端口一致,后面则是服务器定义的远程对象服务名。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013101409463A CN103218231A (zh) | 2013-04-23 | 2013-04-23 | 一种解决x64位操作系统环境访问32位控件的通用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013101409463A CN103218231A (zh) | 2013-04-23 | 2013-04-23 | 一种解决x64位操作系统环境访问32位控件的通用方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103218231A true CN103218231A (zh) | 2013-07-24 |
Family
ID=48816059
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013101409463A Pending CN103218231A (zh) | 2013-04-23 | 2013-04-23 | 一种解决x64位操作系统环境访问32位控件的通用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103218231A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105094870A (zh) * | 2014-05-13 | 2015-11-25 | 中标软件有限公司 | 64位Linux操作系统兼容32位应用软件的方法 |
CN111026452A (zh) * | 2019-11-20 | 2020-04-17 | 北京明朝万达科技股份有限公司 | 一种远程32位进程注入64位进程的方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8170123B1 (en) * | 2008-04-15 | 2012-05-01 | Desktone, Inc. | Media acceleration for virtual computing services |
CN103001952A (zh) * | 2012-11-16 | 2013-03-27 | 漳州科能电器有限公司 | 一种电网加密机共享访问的系统及参数更新方法 |
-
2013
- 2013-04-23 CN CN2013101409463A patent/CN103218231A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8170123B1 (en) * | 2008-04-15 | 2012-05-01 | Desktone, Inc. | Media acceleration for virtual computing services |
CN103001952A (zh) * | 2012-11-16 | 2013-03-27 | 漳州科能电器有限公司 | 一种电网加密机共享访问的系统及参数更新方法 |
Non-Patent Citations (1)
Title |
---|
马波: "基于.NET Remoting分布式技术改进投资银行风险管理系统性能的研究与应用", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105094870A (zh) * | 2014-05-13 | 2015-11-25 | 中标软件有限公司 | 64位Linux操作系统兼容32位应用软件的方法 |
CN111026452A (zh) * | 2019-11-20 | 2020-04-17 | 北京明朝万达科技股份有限公司 | 一种远程32位进程注入64位进程的方法及系统 |
CN111026452B (zh) * | 2019-11-20 | 2023-10-20 | 北京明朝万达科技股份有限公司 | 一种远程32位进程注入64位进程的方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11728992B2 (en) | Cryptlet binding key graph | |
US10467321B2 (en) | Systems and methods for dynamic C# serialization | |
JP4729262B2 (ja) | ロケーション・アウェアネスのアーキテクチャとシステム | |
US9122651B1 (en) | Computer system to support failover in an event stream processing system | |
US8966082B2 (en) | Virtual machine address management | |
US10162727B2 (en) | Activity tracing diagnostic systems and methods | |
US7533368B1 (en) | User interface driven by dynamic state changes | |
CN103150154B (zh) | 一种应用程序插件的实现方法及装置 | |
US10303529B2 (en) | Protocol for communication of data structures | |
CN103747004A (zh) | 物联网平台通信协议的实现方法 | |
US7774405B2 (en) | Coordination of set enumeration information between independent agents | |
CN109547243B (zh) | 一种基于dds的跨网段通信方法 | |
CN104935660A (zh) | 一种云程序开发运行系统、方法及装置 | |
CN103399735A (zh) | 远程函数调用接口中间层开发方法 | |
CN103218231A (zh) | 一种解决x64位操作系统环境访问32位控件的通用方法 | |
CN101246564A (zh) | 一种基于Web Service和以XML为资产定义的资产管理系统 | |
US11194616B2 (en) | Method, apparatus and system for simultaneously transmitting or receiving multiple managed objects | |
Dave et al. | Ponte message broker bridge configuration using mqtt and coap protocol for interoperability of IoT | |
CN106844156A (zh) | 智能建筑综合管理平台系统中wcf通信消息拦截方法 | |
CN113326033B (zh) | 一种带有多种语言API的key-value存储系统 | |
JP5165234B2 (ja) | ジャバ言語におけるメソッド参照のサポート | |
CN106341293B (zh) | 一种信息系统接入企业服务总线的方法及装置 | |
WO2011041740A1 (en) | System and method for a thin-client terminal system with a local screen buffer using a serial bus | |
KR20150129987A (ko) | 이기종 장치의 데이터 수집을 위한 미들웨어 간 인터페이스 장치 및 방법 | |
Fang et al. | Design of real-time distributed system using DDS |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130724 |
|
WD01 | Invention patent application deemed withdrawn after publication |