楼主: keaide

从 Visual Basic 6.0 到 Visual Basic.NET 的转换

[复制链接]
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
11#
 楼主| 发表于 2006-8-7 23:18 | 只看该作者
升级

向导



IsMissing 函数由 IsNothing 函数代替,并且标记有升级警告注释。



ParamArray 参数

Visual

Basic 6.0 当变量传递给 ParamArray 参数时,可以通过被调用的函数修改。不支持 ByVal ParamArray 元素。


Visual Basic.NET



当变量传递给 ParamArray 参数时,不能通过被调用的函数修改。不支持 ByRef ParamArray 元素。


ParamArray 参数最常见的情况是不修改传递给此参数的变量。不支持 ByRef ParamArray 参数简化了 ParamArray 调用规则,因为 ParamArray 参数将被指定为正常数组。这样,ParamArray 参数可以扩展到任何元素类型,同时需要 ParamArray 参数的函数均可通过数组(而不是参数列表)直接调用。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
12#
 楼主| 发表于 2006-8-7 23:19 | 只看该作者
升级

向导



过程的 ParamArray 参数标记有升级警告。例如,以下代码:


Function MyFunction(ParamArray p() As Variant)

'...

End Function

升级后将变为:


' UPGRADE_WARNING: ParamArray p was changed from ByRef to ByVal

Function MyFunction(ByVal ParamArray p() As Object)

'...

End Function



声明中的 As Any 参数

Visual

Basic 6.0 本地 API 的参数可以声明为 As Any,这样对本地 API 的调用就可以传递任何数据类型。通过这一方法,可以调用参数支持两种或多种数据类型的 API。




Visual Basic.NET



重载的 Declare 语句可以定义为允许调用带有两种或多种数据类型的本地 API。例如,以下 Declare 语句:


Private Declare Function GetPrivateProfileString _

Lib "kernel32" Alias "GetPrivateProfileStringA" ( _

ByVal lpApplicationName As String, _

ByVal lpKeyName As Any, _

ByVal lpDefault As String, _

ByVal lpReturnedString As String, _

ByVal nSize As Long, _

ByVal lpFileName As String) As Long

可以由两个 Declare 版本代替,一个接受 Long,一个接受字符串。


Overloads Private Declare Function GetPrivateProfileStringKey _

Lib "kernel32" Alias "GetPrivateProfileStringA" ( _

ByVal lpApplicationName As String, _

ByVal lpKeyName As String, _

ByVal lpDefault As String, _

ByVal lpReturnedString As String, _

ByVal nSize As Long, _

ByVal lpFileName As String) As Long

Overloads Private Declare Function GetPrivateProfileStringNullKey _

Lib "kernel32" Alias"GetPrivateProfileStringA" ( _

ByVal lpApplicationName As String, _

ByVal lpKeyName As Long, _

ByVal lpDefault As String, _

ByVal lpReturnedString As String, _

ByVal nSize As Long, _

ByVal lpFileName As String) As Long

这提高了类型的安全性,并减少了导致程序失败的小毛病。这一情况的存在是因为编译器不允许通过没有显式定义的数据类型来调用 API。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
13#
 楼主| 发表于 2006-8-7 23:19 | 只看该作者
升级

向导



使用 As Any 参数的 Declare 语句标记有升级警告。



Implements

Visual

Basic 6.0 Implements 语句指定在其出现的类模块中实现的接口或类。






Visual Basic.NET



Visual Basic.NET 中的 Implements 与 Visual Basic 6.0 中的 Implements 有两个本质区别:


在 Implements 语句中不能指定类。

每一种实现方法均要求在方法声明语句的结束处使用 Implements 子句。该子句指定其实现的接口方法。

由于要求每一种实现接口方法的方法均使用 Implements 子句,所以提高了代码的可读性;在阅读使用方法来实现接口方法的的代码时,这一优点显而易见。




升级

向导



如果类 a 实现类 b,则将为类 b 声明接口,且类 a 将变为实现类 b 的接口:


Interface _b

Function MyFunction() As String

End Interface

Class a

Implements _b

Function b_MyFunction() As String Implements _b.MyFunction

End Function

End Class



属性

Visual

Basic 6.0 在 Visual Basic 6.0 中,特定属性的 Get、Let 和 Set 属性函数可以通过不同级别的访问选项声明。例如,Property Get 函数可以声明为 Public 而 Property Let 可以声明为 Friend。




Visual Basic.NET



属性的 Get 和 Set 函数必须具有相同级别的访问选项。这样就便于 Visual Basic.NET 与其他 .NET 语言协同操作。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
14#
 楼主| 发表于 2006-8-7 23:19 | 只看该作者
升级

向导



如果访问选项的级别不同,则新属性为 Public。



默认属性

Visual

Basic 6.0 任何成员均可标记为类的默认值。




Visual Basic.NET



只有接受参数的属性可以标记为默认值。对于将成为集合中的索引的带参数属性,这一情况很常见。


这使得代码的可读性更强,因为对没有成员的对象变量的引用通常指向对象自身,而不是指向上下文中的对象和其他上下文中的默认属性。例如,语句 Call Display(TextBox1) 可能是将文本框实例传递给 Display 函数,也可能是传递文本框的内容。


此外,删除这种二义性避免了使用单独的语句执行引用赋值。赋值 x = y 总是意味着将变量 y 的内容赋值给变量 x,而不是将 y 引用的对象的默认属性赋值给 x 引用的对象的默认属性。




升级

向导



尽可能解析默认属性。无法解析时(延迟绑定对象)将添加错误注释。



枚举

Visual

Basic 6.0 枚举常数可以无限定地被引用。




Visual Basic.NET



如果在文件或项目级别为枚举添加了 Import,则枚举常数可以无限定引用。


这样可以与类、结构和接口保持一致,在类、结构和接口中,可以给成员赋予通用名称,而不必担心与其他成员冲突。例如,Color 枚举和 Fruit 枚举均可以包含名称为 Orange 的常数。在 Visual Basic 6.0 中的规则是,为枚举常数加上前缀使每个常数保持唯一。这使常数名称非常累赘,如 MsColorOrange 和 MsFruitOrange。




升级

向导



对枚举的引用将变为完全限定。



While

Visual

Basic 6.0 While 语句以 WEnd 语句结束。




Visual Basic.NET



为了与其他块结构保持一致,While 的结束语句变为 End While。这提高了语言的一致性和可读性。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
15#
 楼主| 发表于 2006-8-7 23:20 | 只看该作者
升级

向导



将 WEnd 语句变为 End While。



On...GoTo 和 On...GoSub

Visual

Basic 6.0 根据表达式的值,On expression GoTo destinationlist 和 On expression GoSub destinationlist 语句使程序转向目标列表中的若干个指定行之一。




Visual Basic.NET



On...GoTo 和 On...GoSub 是非结构化的编程构造。它们的使用让程序更加难以阅读和理解。Select Case 可以提供一种更加结构化和灵活的方法来执行多个分支。


注意:仍然支持 On Error GoTo。




升级

向导



以下示例:


On MyVariable GoTo 100,200,300

将标记有升级错误:


' UPGRADE_ISSUE On MyVariable GoTo was not upgraded

On MyVariable GoTo 100,200,300

您应当重写代码以避免使用这样的语句,例如:


On x Goto 100,200,300

可以重写为:


Select Case x

Case 1: '插入第 100 行的代码

Case 2: '插入第 200 行的代码

Case 3: '插入第 300 行的代码

End Select



GoSub...Return

Visual

Basic 6.0 GoSub line...Return 语句在过程中分支到子例程,然后从子例程返回。




Visual Basic.NET



GoSub...Return 是非结构化编程构造。它的使用让程序更加难以阅读和理解。一个更加结构化的替代方案是:创建可以调用的独立过程。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
16#
 楼主| 发表于 2006-8-7 23:20 | 只看该作者
升级

向导



与 On...GoTo 相同,这些语句均标记有升级错误。



LSet

Visual

Basic 6.0 LSet 用空格填充字符串使其为指定长度,或者将用户定义类型的变量复制到另一个用户定义类型的变量。




Visual Basic.NET



不支持 LSet 语句。LSet 对类型而言很不安全,因此会在运行时导致错误。此外,由于它对类型而言不安全,因此执行时代码必须完全可靠。删除 LSet 语句后无法将一个结构复制到另一个结构;但是,可以修改 Visual Basic.NET 代码,使用 RtlCopyMemory 来获得相同的效果。




升级

向导



语句:


LSet a1 = a2

将标记有升级错误


' UPGRADE_ISSUE: LSet cannot assign a UDT from one type to another

LSet a1 = a2



VarPtr、StrPtr 和 ObjPtr

Visual

Basic 6.0 VarPtr、StrPtr 和 ObjPtr 以整数形式返回变量的地址,然后将此地址传递到使用地址的 API 函数(例如 RtlCopyMemory)。VarPtr 返回变量的地址,StrPtr 返回字符串的地址,ObjPtr 返回对象的地址。这些函数均未记录在文档中。




Visual Basic.NET



可以检索数据项的地址,但是检索必须通过调用 CLR 才能进行。这是因为 CLR 通常可以在内存中自由移动项目,因此需要让 CLR 知道何时在使用地址,不能移动项目。以下示例检索对象的地址:


Dim MyGCHandle As GCHandle = GCHandle.Alloc(o,GCHandleType.Pinned)

Dim Address As Integer = CInt(MyGCHandle.AddrOfPinnedObject())

'...

MyGCHandle.Free() '再次允许移动对象实例

允许运行时移动数据项目能够改善运行时的性能。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
17#
 楼主| 发表于 2006-8-7 23:20 | 只看该作者
升级

向导



这些语句不会自动升级,因此将标记有“(statement) is not supported”[(语句)不被支持] 的升级错误。例如,以下代码:


a = VarPtr(b)

升级后将变为:


' UPGRADE_ISSUE: Function VarPtr() is not supported

a = VarPtr(b)

这也会导致编译错误。



文件 I/O

Visual

Basic 6.0 语言中包括文件 I/O 语句。




Visual Basic.NET



通过类库使用文件 I/O 操作。从语言中删除文件 I/O 语句以便在 Visual Basic.NET 中使用不同的 I/O 库。如果语言中存在文件 I/O 语句,将会使代码更加累赘,标识符 Open、Close、Print 和 Write 将成为保留字。




升级

向导



文件 I/O 语句将升级为相应的函数。例如,以下代码:


Open nput )



Debug.Print

Visual

Basic 6.0 Debug.Print 将一行文字输出到“立即”窗口。




Visual Basic.NET




Debug.WriteLine 将一行文字输出到“输出”窗口。还可以使用 Debug.Write 方法将文字输出到“输出”窗口,并且没有换行符。




升级

向导



Debug.Print 升级为 Debug.WriteLine。



资源文件

Visual

Basic 6.0 Visual Basic 6.0 支持每个工程使用一个 .res 文件。




Visual Basic.NET



Visual Basic.NET 支持多种资源文件。可以绑定窗体以自动从新的 .resX 格式资源文件中检索资源。任何 CLR 类均可存储在 .resX 文件中。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
18#
 楼主| 发表于 2006-8-7 23:20 | 只看该作者
升级

向导



文件由 .res 升级为 .resX,并且代码被修改以便从 .resX 文件中加载。



Windows 应用程序

Visual Basic 窗体

Visual

Basic 6.0 Visual Basic 6.0 具有自己的窗体包,用于创建图形 Windows 应用程序。




Visual Basic.NET



对于 Visual Basic.NET,Windows 窗体是一种新的窗体包。由于 Windows 窗体是以公共语言运行时 (CLR) 为目标构造的,因此 Windows 窗体可以充分利用 CLR 的全部功能。特别是,由于 Windows 窗体包具有部署、应用程序分离、版本和代码访问安全特性方面的优势,您现在可以构造基于 Windows 的客户端应用程序,其部署和更新明显更加简易。您甚至可以构造与 HTML 具有相同浏览器部署方案的 Windows 窗体应用程序。正如代码访问安全性的粒度控制一样,这些特性也使得在浏览器中使用 Windows 窗体控件非常令人瞩目。


Windows 窗体集还为 Visual Basic 开发者提供了许多新功能,例如可视化继承、改进的本地化和访问支持、自动调整窗体大小和就地菜单编辑器。




升级

向导



将 Visual Basic 窗体升级为 Windows 窗体。



PrintForm 方法

Visual

Basic 6.0 PrintForm 方法将 Form 对象的图象一个字节一个字节地发送至打印机。但是,此打印功能在某些窗体中无法正常工作。




Visual Basic.NET



在 Windows 窗体中,Visual Basic.NET 采用的打印框架使您可以快速生成复杂的打印文档。它还包括内置的“打印预览”对话框。




升级

向导



PrintForm 方法调用标记有升级错误。您可以使用新的打印框架创建打印文档,甚至可以拍下应用程序窗口的屏幕快照并进行打印。



Circle、Cls、PSet、Line 和 Point 方法

Visual

Basic 6.0 通过 Circle、Cls、PSet、Line 和 Point 方法,您可以在窗体中绘图,也可以清除这些图象。




Visual Basic.NET



Windows 窗体具有一套新的图形命令,用于替换 Circle、Cls、PSet、Line 和 Point。Windows 窗体包是在 GDI+ 的基础上构建的。GDI+ 是功能丰富的二维文字和图象处理图形库,现在可以直接在 Visual Basic.NET 中使用。在以前的版本中,如果不通过 Declare 语句和 GDI API,Visual Basic 程序员无法使用这些功能。虽然这一转变比较大,但是 GDI+ 的灵活性和强大功能让程序员能够快速开发应用程序,而使用以前版本的 Visual Basic 将会花费多得多的工作量。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
19#
 楼主| 发表于 2006-8-7 23:21 | 只看该作者
升级

向导



对这些方法的调用标记有升级错误。您可以在 System.Drawing 中记下使用 GDI+ 类的图形调用。



Name 属性

Visual

Basic 6.0 Name 属性返回代码中使用的名称以识别窗体、控件或数据访问对象。在运行时为只读。




Visual Basic.NET



在运行时 Windows 窗体不支持窗体和控件的 Name 属性。如果需要迭代 Controls 集合以查找某一名称的控件,您可以使用 .NET 框架的 System.Reflection 类进行查找。




升级

向导



控件的 Name 属性将标记有升级错误。



Caption 属性

Visual

Basic 6.0 某些控件(例如 Label)具有 Caption 属性,用于确定在控件中或控件旁边显示的文字。其他控件(例如 TextBox)具有 Text 属性,用于确定控件中包含的文字。




Visual Basic.NET



在 Windows 窗体中,对于所有控件,用于显示控件中文字的属性均统一称为 Text。这简化了控件的使用。




升级

向导



将控件的 Caption 属性变为 Text。



Tag 属性

Visual

Basic 6.0 Tag 属性可以返回或设置用于存储程序所需额外数据的表达式。


在 Visual Basic 6.0 中无法扩展内置控件,所以 Tag 属性是必需的。




Visual Basic.NET



在 Windows 窗体中,您可以使用继承来扩展内置控件,并添加自己的属性。将继承作为工具使用明显使内置控件更加灵活。您不仅可以根据需要添加任意多种属性,还可以将这些属性设为强属性。




升级

向导



兼容库中的 Windows 窗体扩展程序 Tag 控件用于提供相同的功能。



ScaleMode 属性

Visual

Basic 6.0 ScaleMode 属性返回或设置一个值,以在使用图形方法或定位控件时表明对象的坐标度量单位。




Visual Basic.NET



Windows 窗体始终使用象素作为度量单位,简化了窗体布局。


此外,Windows 窗体使用更好的方法来调整大小。AutoScaleBaseSize 属性根据屏幕的分辨率 (dpi) 和使用的字体大小自动调整缩放比例。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
20#
 楼主| 发表于 2006-8-7 23:21 | 只看该作者
升级

向导



使用“twip”(缇)(Visual Basic 6.0 中 ScaleMode 的默认设置)的代码将完全升级。如果 ScaleMode 为非缇,您将遇到调整大小方面的问题。


有关该主题的全面说明,请参阅白皮书《准备将 Visual Basic 6.0 应用程序升级到 Visual Basic.NET》(英文)。



字体

Visual

Basic 6.0 窗体和控件可以使用任何 Windows 字体。




Visual Basic.NET



窗体和控件只能使用 TrueType 或 OpenType 字体。使用这些类型的字体可以解决不同操作系统版本及其本地化版本之间的许多不一致性问题。这些字体还具有不依赖设备分辨率和反走样等功能。




升级

向导



如果在应用程序中使用非 TrueType 字体,这些字体将变为默认的 Windows 窗体字体,但其格式(大小、粗体、斜体和下划线)将会丢失。



Screen.MousePointer 属性

Visual

Basic 6.0 Screen 对象的 MousePointer 属性可以返回或设置一个值,以表明运行时鼠标在应用程序窗体外部显示的鼠标指针类型。




Visual Basic.NET



如果鼠标指针位于应用程序内部的窗体中,则可以进行操作;当其位于应用程序外时则不能。在今后的版本中我们将继续完善其功能。




升级

向导



使用 Sceen.MousePointer 的语句标记有升级错误。



Timer.Interval 属性

Visual

Basic 6.0 Timer 控件的 Interval 属性返回或设置 Timer 事件调用之间的毫秒数。如果设置为 0,则禁用 Timer 控件。Enabled 属性还用于确定计时器是否在运行。这将引起混乱,因为即使 Enabled 属性为 True,如果时间间隔为 0,仍不能启用计时器。




Visual Basic.NET



Interval 属性表明计时器刻度之间的时间(以毫秒为单位)。此属性不能设置为 0。Enabled 属性指定计时器是否在运行。这一方式更加直接,可以简化 Timer 对象的编码。




升级

向导



如果 Timer.Interval 设置为 0,升级向导能够检测到这一情况,并为 Timer.Interval 标记升级错误。


建议您在 Visual Basic 6.0 应用程序中使用 Timer.Enabled,因为此属性可以顺利升级。



控件数组

Visual

Basic 6.0 控件数组是一组共享同一名称和类型的控件。它们也共享同一事件过程。控件数组至少有一个元素,只要您的系统资源和内存允许,它可以有任意多个元素。同一控件数组的元素具有各自的属性设置。




Visual Basic.NET



Windows 窗体体系结构可以处理使用控制数组的多种方案。例如,在 Windows 窗体中可以通过单一事件句柄处理多个控件的多个事件。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表