反叛之冰:Internet Communications Engine

ICE网络编程 CORBA的替代产品 ICE网络编程 介绍ICE中间件,远程过程调用RPC,适用于C++ Java等各种语言 立即下载

撰文:马维达

Marc Laukien:Object-Oriented Concepts, Inc的创办人和总裁。开放源码的ORBacus (原名OmniBroker,完全遵从CORBA的ORBA)的主要作者。在2001年IONA(著名的CORBA技术公司)收购OOC之后,他出任IONA负责CORBA开发的副总裁……
Michi Henning:IONA公司前首席CORBA科学家。CORBA编程的经典书籍Advanced CORBA Programming with C++的作者之一。他参与制订了若干OMG规范,并曾是OMG的C++ Revision Task Force的主席……
Bernard Normier:1995年加入IONA公司,并成为Orbix 2000的领头工程师之一。他是OMG的Persistent State Service规范的作者,并且直到2003年2月,他仍是C++和Transaction Service Revision Task Force委员会的主席……
……
看到这样一些CORBA“老兵”,倘若不加以说明,你一定会以为这是一篇关于CORBA的文章。但正如文章名和上面的简介中的一些措辞(“前”、“曾是”、“直到……仍是”……)所暗示的,本文将要讲述的,并非CORBA,而是对CORBA的“反叛”——这支“叛军”名为ZeroC公司,名不见经传;这家公司的旗舰产品叫Internet Communications Engine(Ice);而创办这家公司的,正是上述这些大名鼎鼎的前CORBA阵营中的领军人物。

一、 概览
按照ZeroC的说法,Ice是“一种现代的面向对象中间件,可用于替代像CORBA或COM/DCOM/COM+这样的中间件。在易于学习的同时,它为各种有着苛刻的技术要求的应用提供了强大的网络基础设施。在像SOAP或XML-RPC这样的技术太慢、或是没有提供足够的可伸缩性或安全性之处,正是Ice开始闪耀之地。”而如果把Ice看作是“Millennium CORBA,扔掉了在其生命期里累积的包袱,但却保留了它的全部好特性,增加了一些特性,并以一种明晰而整洁的方式设计它们”,或许更能够让你把握到Ice的本质;甚至于,如果你十分了解CORBA,了解它的长处和弱点,你又深入了解了Ice,你或许也会像给出上述评语的Frank Pilhofer(又一个CORBA专家!)那样叫道:“Way to go!”。
那么,与CORBA相比,Ice到底有何优点?在回答这个问题之前,先让我们看一看Ice拥有哪些值得夸耀的特性:

  • 面向对象的规范语言。
  • 易于使用的C++和Java映射。在未来的版本中还将支持更多的映射(比如C#)。
    非常高效的协议,还可以进行协议压缩。
  • 异步方法调用(asynchronous method invocation)和异步方法分派(asynchronous method dispatch)。
  • 动态的传输插件。
  • TCP/IP和UDP/IP支持,以及基于SSL的安全性。
  • Ice防火墙解决方案,支持回调。
  • 使用XML的自动持续(persistence),包括对版本管理的支持。
  • 类型化的消息传递服务,支持联盟(federation)。
  • 软件修补和更新服务。
  • 完善的部署工具。
  • 详尽的文档。
  • GPL授权或商业授权(商业用途)。
  • 支持Windows 2000/XP、Linux和Solaris操作系统。在未来的版本中还将支持更多的操作系统。


Ice由以下一些软件包组成:
IceUtil
一组实用函数,比如像Unicode处理和线程编程(只是C++版本)
Slice
Ice规范语言(Specification Language for Ice)。Slice在客户和服务器之间建立合约,另外也被用于描述持续数据。
Slice编译器
用于把Slice编译为目标语言(比如C++、Java、XML)或是根据Slice文件自动生成文档。
Ice
Ice核心库。它使用非常高效的协议(包含了协议压缩和对TCP和UDP的支持)管理所有的通信任务,为多线程服务器提供灵活的线程池,并且还有支持极端的可伸缩性的额外功能——可能达到数百万个Ice对象。除此而外,Ice核心库还有其他一些功能。
IceBox
专用于Ice应用的应用服务器。IceBox可以轻松地运行和管理Ice服务,这些服务可作为DLL、共享库或Java类动态加载。
IcePack
完善的服务器激活和部署工具。通过IcePack,在异种计算机网络中部署应用的复杂任务得到了极大的简化。你只需要提供行业标准XML格式的部署描述信息,IcePack就能替你处理余下的工作。
Freeze
Freeze为Ice servant提供自动持续。只需少许代码,应用就能与高效管理持续对象的“逐出者”(evictor)结合在一起。Freeze提供二进制数据格式,以获取最大限度的速度;同时还提供XML数据格式,以获取极度的灵活性。当持续数据的Slice描述变化时,你可以轻松地迁移使用XML数据格式的Freeze数据库——对于大型软件项目中的版本管理,这是必不可少的。
IceSSL
Ice核心的动态SSL传输插件。它使用行业标准SSL协议,提供了认证、加密和消息完整性检查。
Glacier
对对象中间件系统的一个极大挑战是安全性和防火墙。Ice的防火墙解决方案Glacier,极大地简化了安全应用的部署。Glacier认证并过滤客户请求,并允许以安全的方式对客户进行回调。与IceSSL结合,Glacier提供了既非侵入式、又易于配置的强大安全解决方案。
IceStorm
一种支持联盟的消息服务。与大多数其他的消息或事件服务相反,IceStorm提供类型化的事件,这意味着在联盟上广播消息就和调用某个接口上的方法一样容易。
IcePatch
用于软件发布的修补服务。让软件保持最新常常是一件单调乏味的任务。IcePatch使各个文件、以及完整目录层次的更新得以自动化。只有变更过的文件才被下载到客户机器中,而且会使用高效的压缩算法。

二、 与CORBA的对比
尽管ZeroC声称自己无意“贬低”CORBA,并称“CORBA相对于其时代而言是一项了不起的成就”,而且Ice还从CORBA那里借取了许多好思想,但如果这些专家们仍能在CORBA内部进行变革,仍认为CORBA还有前途,他们大概也无需成立新的公司,开发新的产品,“公然”进行“反叛”了。看完下面的译自ZeroC网站的“Ice vs. CORBA”的对比,你不仅能够明白,Ice相对于CORBA究竟有何优势,你或许也将明白,“叛军”之所以要成为“叛军”的原因。


完备性
当我们说完备性时,我们意指的是现实世界产品的完备性,而不是那些从未被实现的规范的完备性。我们相信Ice比市场上任何一种CORBA产品都要完备。你自己检查一下:哪一种CORBA产品真的提供了可与Ice相比的特性?
没有“Design by Committee”
Ice是由一小群热诚的、富有高度经验的人设计的。它并不试图成为适用于所有人的万用药。而另一方面,在CORBA规范中则充斥着各种“华而不实的东西”;这些东西由一些即得利益集团强行注入规范之中,它们并没有真的弄清楚这些规范是否能被实际实现。
在CORBA规范的提交过程中,达成一致的途径常常是把所有已经存在的私有实现的五花八门特性的集合全数接受下来。结果,规范的大小和复杂度远远超出了必需,而且平台也更大、更慢,并使得所得到的复杂API变得更难以使用。Ice提供的API要小得多、更为高效,比等价的CORBA API更易于学习,而且也没有牺牲功能。
Slice
Slice比CORBA IDL更小、更干净、更强大。它的语言成分更少,在整体上却更为灵活。例如,内建的字典(dictionary)类型提供了对快速访问(fast-access)数据结构的直接支持,异常继承提供了更为干净的到“具有内建的异常处理功能的语言”的映射。同时,Slice消除了CORBA IDL的许多不必要的复杂性,比如属性(attribute)、inout参数、context,以及Objects-by-Value(OBV)的复杂性。
持续
Slice不只是一种接口定义语言,它还可被用于描述持续的Ice对象的状态,从而使我们更易于编写在数据库中自动地存储对象状态的服务器。
元数据(Metadata)

Slice支持一种可扩展的元数据设施,允许我们为应用特定目的标记Slice成分。例如,元数据可被用于定义Java语言映射,满足特定应用的需求。
没有Any类型
Ice没有CORBA Any类型的等价物。CORBA用户也许会对此感到很意外,因为在CORBA规范中大量使用了Any类型。但是,Any类型是多余的:像Java和C++这样的程序设计语言不需要Any类型,设计良好的分布式系统也不需要。Any类型通常被用于两种情况下:或是系统需要一种不透明的类型,中介方可进行接收和传递,而无需了解该类型的细节(比如CORBA Event Service);或是被用作联合(union)的等价物。
Ice可以发送和接收如“blob”这样的请求来处理第一种情况,Slice类继承可以处理第二种情况。无论是哪种情况,所得到的应用都更为高效、更为安全,也更易于设计和实现,而且不会遭受与CORBA Any类型相关联的复杂性的折磨。
Ice核心
CORBA核心随着时间的过去已经变得极其复杂。一个最好的例证是Portable Object Adapter,尽管需要支持经常出现的实现技术很少,它仍要求开发者具有专门的知识才能对其进行正确的使用。而另一方面,Ice对象适配器,更简单,更直接,并且比POA更强大:使用POA,有些工作会变成长期的编程项目,而使用Ice对象适配器,使用一些设计良好的API可以很快完成这些工作。
Ice协议
IIOP是CORBA最为薄弱的地方之一,其设计缺陷太多,很难把它们一一列出。仅举几个例子:没有请求封装,这使得转发服务(比如Event Service)在不了解所涉及的所有类型的细节的情况下,无法进行工作;低效的对齐规则迫使系统进行不必要的数据复制;数据编码规则很复杂,却又没有带来性能上的提高;对象引用编码非常复杂,妨碍了高效的整编和内存共享实现;代码集磋商还未定义,并且遭受到竞争状态的折磨;所有这些复杂性意味着IIOP难以实现,并会带来互操作性和性能问题。Ice协议简单、更高效,并且提供了像数据压缩和批请求这样的特性(IIOP无法支持这些特性)。
安全性
安全性总是CORBA最大的问题之一。OMG反复以书面形式制定了一些规范,却仍未有广泛可用的实现支持这些规范,CORBA用户也仍然无法得到可用和安全的ORB。与此相反,在设计Ice时,我们始终把安全性放在首要位置。这也是Ice为何要创造性地提供SSL,并提供确实能工作的、灵活而没有侵入性的防火墙解决方案的原因。
C++映射
与CORBA和C++“共事”非常困难,即使对于有经验的C++开发者来说也是如此。有无数涉及内存管理和异常安全性的陷阱和缺陷。与此相反,Ice C++映射非常简单和直接。开发者实际上不可能由于犯错而造成内存泄漏。要记住的规则的数量无限地小于CORBA C++映射的规则数量,而且,Ice C++映射基于STL行业标准。
可伸缩性
CORBA技术的可伸缩性非常好,但前提是你是一个专家。而使用Ice,谁都可以编写可高度伸缩的应用。例如,Ice为你实现了一种持续的“逐出者”模式,让你能够很容易地处理数百万对象。你所需做的就是用Slice定义持续对象数据,并让Ice来完成余下工作:Ice run-time会使用高速数据库自动地加载和存储对象。
版本管理
CORBA没有任何用于支持对象状态的版本管理的机制。Ice可以将数据存储为XML格式,当持续数据的Slice描述变化时,可以很容易地将数据库移植到新的格式。
软件更新
IcePatch工具可以用来保持客户软件的及时更新,它使用了压缩来进行高效的数据传输,使用了校验和来保证一致性。CORBA没有提供在分布式系统中分发软件更新的机制。
类型化事件服务
在CORBA中有类型化事件服务规范,但其实现(如果有的话)却很少。它的类型化事件服务还存在着许多已知问题,使其在现实世界的部署中实际上是无用的。Ice的设计从最开始就支持类型化事件服务。IceStorm是高效的类型化事件服务实现,同时还支持联盟。
Facets(面)
CORBA支持继承、DCOM支持聚合。在过去,有许多关于何者更好的辩论。Ice两者都支持:接口继承加上聚合,以facets的形式。facets允许你使用动态聚合,而不是静态继承,来在运行时扩展类型。
异步消息
CORBA支持Asynchonous Message Invocation (AMI),但几乎没有CORBA产品实现AMI。以一种简单而高效的方式,Ice从最开始就支持AMI。Ice还支持Asynchronous Message Dispatch (AMD),在CORBA中没有对应的等价物。AMD是用于客户的AMI的服务器端等价物。通过AMI,你可以将分派线程返还给Ice,并在将结果递送给客户时进行回调。可将AMI和AMD串联在一起,从而创建非常高效的、资源消耗很少的路由器。
AMI和AMD对客户和服务器来说都是透明的。也就是说,服务器不知道请求是通过AMI到达的,还是同步发送的,而客户也不知道操作调用是通过AMD处理的,还是同步处理的。要支持AMI和AMD,无需改动Slice定义。

三、 应用实例
2003年3月17日,一家名为Mutable Realms的公司在E3游戏展上公布了一款名为“Wish”的新游戏。该公司宣称,通过这个游戏,他们定义了一种新的游戏范畴:Ultra Massive Multiplayer Online Role Playing Games。与传统的Massively Multiplayer Online Role Playing Games (MMORPG)不同的是,Wish不会将游戏者限制在某个只有数百游戏者的服务器上,而是允许数万游戏者出现在同一个3D幻想世界里。
Wish所用的通信平台正是Ice。正如Michi Henning所说,这样的游戏对可伸缩性、速度和可靠性的要求,只有大型的电信项目才能超出——难以想象,不是吗?实际上,ZeroC和Mutable Realms两家公司进行了紧密的合作,以确保Ice能够提供开发Wish这样的游戏所需的全部特性(这样的“定制”没有什么坏处,你大概不会嫌自己的应用跑得太快;如果你真这么觉得的话,有一个解决问题的好办法:::sleep(100))。
或许我们已没有必要再贬抑CORBA,但来自Mutable Realms的开发者Benoit,仍然“借用”了CORBA来表达对Ice的欣赏:“I have no doubt that our productivity wouldn't be as good if we were using CORBA as our middleware technology”。

四、 结语
“Basically, Ice is what we always wished CORBA would have been.”当Michi Henning这样说的时候,他想到了自己作为世界顶尖的CORBA专家,在每天使用CORBA、达8年之久之后,仍然要靠查对自己撰写的书来编写CORBA代码——因为他还是记不清那些细节;他也想到了OMG内部那些“令人恐惧”的磨擦和这一领域中创新的“令人恐惧”的衰减……遇到这样的局面,不生出“异心”,大概根本称不上是真正的技术专家;而当领军人物开始另起炉灶,CORBA的末日或许就真的不远了。
但另一方面,技术也许从来都不是IT行业真正的决定性因素。商业才是。至少就目前看来,Ice还未受到广泛的关注,而像OMG这样的“豪门俱乐部”,以及各大CORBA技术公司,也不会轻易就放弃自己的地盘。Ice的前途究竟如何,还有待时日来观察。如果在国内有更多的公司或个人采用Ice来开发软件,无疑将有助于Ice的发展和进步。
反叛,才刚刚开始。

CORBA的兴衰中文版 但是这篇辩论文并不能完整说明CORBA为何失利。毕竟,如果技术像原来的设想的一样引人注目,客户不会抛弃它而选择其它的替代技术。 立即下载

相关推荐

RK3568 开发实战:手动构建 Linux 4.19 内核镜像与设备树优化

本文详细介绍了为RK3568开发板手动编译Linux 4.19内核的完整实战流程。从环境搭建、源码获取、内核配置,到设备树深度定制与优化,再到镜像打包与烧写,旨在帮助开发者脱离官方SDK依赖,实现对嵌入式Linux系统的完全掌控,提升硬件适配与性能优化能力。

weixin_29175469的博客 269

CORBA技术探索起步

         一、概述CORBA(Common Object Request Broker Architecture, 公共对象请求代理体系结构)是由OMG(对象管理组织,Object Management Group)提出的应用软件体系结构和对象技术规范,其核心是一套标准的语言、接口和协议,以支持异构分布应用程序间的互操作性及独立于平台和编程语言的对象重用。 CORBA经过近十多

JDMBA的专栏 8299

手把手拆解DGX GB200 NVL72:1个机柜如何塞进72块GPU?详解NVLink Switch铜缆背板设计

本文深度解析英伟达DGX GB200 NVL72系统如何通过NVLink Switch铜缆背板设计,在标准42U机柜中集成72块B200 GPU,实现1800GB/s的超高带宽。文章详细介绍了模块化架构、铜缆互连技术、液冷散热方案和高密度供电系统等核心创新,为AI算力需求提供突破性解决方案。

red88的博客 1576

反叛之冰:ZeroC ICE基础使用

1        系统环境 系统:Win7。 版本:JDK 1.8.0_91,ZeroC ICE 3.6.3。 2        基础 官网:https://zeroc.com 视频教程:https://www.chuanke.com/v6242976-184547-1010808.html 书籍:ZeroC Ice权威指南 高清 带索引书签目录 leader-us(著) 2.1

hellohorizon的编程笔记 8704

LVGL 9.4 性能调优实战:如何通过脏区合并与tile分块,让你的嵌入式UI流畅度翻倍

本文深入探讨LVGL 9.4中的性能优化技术,重点介绍脏区合并与tile分块如何显著提升嵌入式UI流畅度。通过实战案例和源码分析,详细解析局部刷新策略、显示框架调优及性能瓶颈诊断方法,帮助开发者在STM32、ESP32等资源受限设备上实现丝滑的UI体验。

weixin_28678831的博客 450

深度学习模型设计的方法和技巧

设计神经网络模型是一个迭代的过程,需要不断试验和调整各个组成部分,以达到最佳性能。同时,遵循良好的工程实践,如模块化设计、版本控制、文档记录等,也是成功的关键。

xw555666的博客 4026

关于 ZeroC ICE 的不成熟思考(续)

看完了 Distributed Programming with Ice,阅读量相当大,只好粗看一遍,有好几种语言实现的地方只看C++,即使这样也有了3个月的时间,才看完,并练习了Ice部分的Demo。 Ice是优秀的通讯中间件,是用于建立高性能、高伸缩性通讯基础设施的平台框架。让我感到疑惑的是:现在企业信息化管理的基础和核心是大型关系数据库系统,如DB2,Oralce,SQL Serve

东风 1万+

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。

weixin_27697385的博客 293

技术发展历程:从 CORBA 到微服务

这些物流企业的系统可能基于不同的技术栈搭建,有的用.NET,有的用 Python。借助 Web Services,电商平台通过 SOAP 协议封装订单数据,以 WSDL 描述服务接口,发布到 UDDI 注册中心,物流企业就能轻松发现并接入服务,实现订单信息的无缝对接与处理,让企业间的集成变得前所未有的容易。并且,CORBA 的部署和维护难度很高,不同厂商实现的 CORBA 产品兼容性欠佳,这使得开发成本居高不下,逐渐难以适应快速发展的网络技术环境,于是催生了新的技术来替代它。不过,RPC 也并非完美无瑕。

1685

测试工程师玩转DeepSeek之Prompt

掌握这些提示词技巧,测试工程师可提升与DeepSeek的协作效率至少3倍。建议结合具体项目上下文进行二次优化,并建立团队内部的提示词知识共享库。✅ “为电商支付接口生成包含幂等性验证的测试用例,覆盖网络中断重试场景”❌ “帮我写测试用例”

weixin_44872675的博客 2259

目标跟踪与视频时序分析基础

两帧均有目标,却因快速移动导致检测框无重叠,仅靠交并比(IoU)无法维持身份关联。本文通过手算与纯Python实现最小跟踪流程,揭示IoU仅为位置线索,不能应对快速位移或遮挡。实验表明,即使目标真实存在,低重叠也会触发新编号。强调跟踪需结合运动预测、外观特征与阈值验证,避免误判。

Mr数据杨 2335

ICE专题:反叛之冰 Internet Communications Engine

<br /><br />Marc Laukien:Object-Oriented Concepts, Inc的创办人和总裁。开放源码的ORBacus (原名OmniBroker,完全遵从CORBA的ORBA)的主要作者。在2001年IONA(著名的CORBA技术公司)收购OOC之后,他出任IONA负责CORBA开发的副总裁……<br /> Michi Henning:IONA公司前首席CORBA科学家。CORBA编程的经典书籍Advanced CORBA Programming with C++的作者之一

Stoneson 1840

11、基于STM32的智能药盒

当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。嵌入式具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

行走的皮卡丘 6100

反叛之冰:Internet Communications Engine ( zz )

反叛之冰:Internet Communications Engine document.title="反叛之冰:Internet Communications Engine - "+document.title撰文:马维达Marc Laukien:Object-Oriented Concepts, Inc的创办人和总裁。开放源码的ORBacus (原名OmniBroker,完全遵从CO

1429

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【编程】中间平台 - ICE(Internet Communications Engine)

撰文:马维达Marc Laukien:Object-Oriented Concepts, Inc的创办人和总裁。开放源码的ORBacus (原名OmniBroker,完全遵从CORBA的ORBA)的主要作者。在2001年IONA(著名的CORBA技术公司)收购OOC之后,他出任IONA负责CORBA开发的副总裁……Michi Henning:IONA公司前首席CORBA科学家。CORBA编程的

2152

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ICE(Internet Communications Engine)

Marc Laukien:Object-Oriented Concepts, Inc的创办人和总裁。开放源码的ORBacus (原名OmniBroker,完全遵从CORBA的ORBA)的主要作者。在2001年IONA(著名的CORBA技术公司)收购OOC之后,他出任IONA负责CORBA开发的副总裁…… Michi Henning:IONA公司前首席CORBA科学家。CORBA编程的经典书籍Ad

记事本 1600

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ICE

ICE专题:反叛之冰 Internet Communications Engine ICE专题:网络服务平台比较 ICE专题:ICE简介 ICE专题:ICE起步 ICE专题:ICE架构 ICE专题:学习ICE 3.0 ICE专题:ICE的5个服务 ICE专题:使用C#编写ICE分布式应用程序 ICE专题:在客户端中如何定位服务器(即如何寻找代理) ICE专题:ICE在Linux下...

小白编程 263

ICE准备工作

准备工作 按照某人的说法:跨平台的C++网络编程ICE才是王道。于是,我学习ICE。 ICE才出来两年,是“一种现代的面向对象中间件,可用于替代像CORBA或COM/DCOM/COM+这样的中间件。在易于学习的同时,它为各种有着苛刻的技术要求的应用提供了强大的网络基础设施。”Ice 3.0 已实现对C++, Java, Python, PHP, C# 及 Visual Basic

ykm0722的专栏 1162

ICE初次

按照某人的说法:跨平台的C++网络编程ICE才是王道。于是,我学习ICE。 ICE才出来两年,是“一种现代的面向对象中间件,可用于替代像CORBA或COM/DCOM/COM+这样的中间件。在易于学习的同时,它为各种 有着苛刻的技术要求的应用提供了强大的网络基础设施。”Ice 3.0 已实现对C++, Java, Python, PHP, C# 及 Visual Basic 的支持。 这里我就不...

shake863 169

学习ICE 3.0--准备工作

按照某人的说法:跨平台的C++网络编程ICE才是王道。于是,我学习ICE。 ICE才出来两年,是“一种现代的面向对象中间件,可用于替代像CORBA或COM/DCOM/COM+这样的中间件。在易于学习的同时,它为各种有着苛刻的技术要求的应用提供了强大的网络基础设施。”Ice 3.0 已实现对C++, Java, Python, PHP, C# 及 Visual Basic 的支持。 这里...

weixin_33978044的博客 168
上一篇: 2004年7月19日
下一篇: 2004年7月20日
韩磊
博客等级 码龄27年 905粉丝 118原创
评论 22
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值