文件名称:跨语言集成-基于javascript实现报警器提示音效果
文件大小:56.6MB
文件格式:PDF
更新时间:2024-07-29 11:57:21
VB2010 高级编程 文字版
4.3 跨语言集成 在.NET推出之前,与其他语言编写的代码交互操作是一种挑战。如果想重用其他语言开发的功 能,只有两种选择: COM 接口或带有导出 C 菌数的 DLL。 如果想在Vis咀lBasic 中使用这些功能, 就只能创建 COM 接口。 由于 VIsual Basic建立在CLR的基础之七,所以它能够与以其他.NET语言编写的代码交互操作。 甚至可以派生于用另一种语言编写的类。为了支持这种功能, CLR采用表示类型的公共方式和用于 描述这些类型的多信息元数据。 4.3.1 通用类型系统 每种编程语言都带有自己的数据类型。 例如. VIsual 8asic 的先前版本使用 8STR(basic, or binaηt string)结构表示字符事:C件提供了 char 和 wchar 数据类型: MFC提供了 CString 类。 C扑的 int 数 据类型是一个 32 位值,而 VIsual 8asic 6 的 Integer数据类型是一个 16 位的值。 所以, 在使用不同 语言编写的应用程序之间传递参数就很困难。 为了解决这个问题.C 语言逐渐演变成在以多种语言编写的程序之间进行交互的公共语言。用 C语言编写的导出函数提供了简单的C语言数据类型,可以由 VIsuaJ 8asíc、 Java、 Delphi 和许多其 他编程语言使用。事实上. Windows API 就是一个 C语言函数集。 但是s 为了访问 C 语言接口,必须显式地将C语言数据类型映射为某种语言的本机数据类型。 例如, VIsual Basíc 6 开发人员会使用下列语句映射 Win32 函数 GetUserNarn队 (GetUserNarneA 是 GetUserName 函数的 ANSI 版本): , Map GetUse rName to t he GetUser NameA exported funct ion , exported by advapi32.dl l. , 800L Ge l:UserName ( LPTSTR lpBu.ffer , 1/ name buffer LPDWORD nSize 1/ size of name buffer ., i e public Decla re Function GetUserName Lib "advapi32 . dll" _ Alias "GetOserNameA" (ByVal strBuffer As String, nSize As Long)λ串 Lon9 这段代码显式地将C字符数组 lp8ufI坊的数据类型L町STR 映射为 VIsual 8 asic 6 的 String参数 strBuffer。 这不仅麻烦,而且容易出错.不小心将声明为Long 的变量映射为 lp8uffer 不会产生编译 错误。然而,在运行时调用该函数就有可能引起难以珍断的问歇性访问冲突。 COM提供了一种在语言之间交互操作的更精炼方法。 Visual Basic 6 为支持 COM 的所有应用程 序引入了一个迎用类型系统(口S)-一种可变可兼容的数据类型。 然而, 可变数据类型对于非 VIsual Basic 6 开发人员来说使用起来很麻烦,就像构成可变数据类型(诸如 BSTR和 SAFEARRAY) 218