将 PRB: 转换 MBF IEEE Visual Basic 中为 Windows

文章翻译 文章翻译
文章编号: 140520 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
展开全部 | 关闭全部

本文内容

症状

创建与较旧的 Microsoft Basic 产品的数据文件 (快速基本网关的基本和 Basica (IBM 和 Compaq 许可 Basic)) 由 Visual Basic 的 Windows 可能无法读取。

原因

才能 IEEE 浮动点标准被广泛接受的 Microsoft 使用已知作为 Microsoft 二进制格式 (MBF) 内部浮动点格式。IEEE 标准引入更高版本,并成为行业标准。

早期版本的 Microsoft QuickBASIC 和网关基本支持仅 MBF 格式。在 Microsoft 基本专业开发系统 (PDS) 和 Visual Basic 的 MS-DOS 函数都是可用和之间进行转换 MBF IEEE 格式的。因为 Microsoft 移动向 IEEE 标准的完整接受,但是,支持的 MBF 格式已被删除。

Visual Basic 的 Windows 使用 IEEE 标准。MBF 格式但是,是与 IEEE 标准不兼容,这种方式保存的数据将不可读。

解决方案

PDS 和 MS-DOS 产品的 Visual Basic 所包含的 MBF 格式和 IEEE 格式之间转换函数。这些函数在 Visual Basic 的 Windows 中不可用。下面是对此问题的两种可能的解决方法:
  1. 用于重新创建该文件包含 MBF 数据的 MS-DOS,可将程序写入 PDS 或 Visual Basic 中。阅读到 PDS 或 Visual Basic 文件信息的 MS-DOS 后,您可以使用 MKxMBF $ 函数 (请参阅手册 PDS 或 Visual Basic 的 MS-DOS 或其帮助菜单) 将转换为 IEEE 格式的数据。此方法是首选的两个原因:
    • 它将转换您的数据为 IEEE,以便其他程序可以访问您的文件。
    • 如果您使用方法 2,您的程序将需要一个额外的 DLL,您必须与您的应用程序一起分发。
  2. 以前,没有办法从 Visual Basic 的 Windows 中转换数据。但现在没有可用于执行此操作的 DLL。此 DLL (MBF2IEEE.DLL) 包含模拟 MKS、 MKD、 CVS 和 CVD 函数不存在的一些基于 ms-dos 的基本产品中的函数。在 Visual Basic Windows 的因此需要该 DLL 中不存在这些函数 (MKS、 MKD、 CVS 和 CVD)。下面的更多信息部分提供有关 DLL 的详细信息,并解释了如何从 Microsoft 下载中心下载。

状态

此行为是设计使然。

更多信息

方法二有关的详细信息: 使用 Mbf2ieee.dll

注: 所有这些函数执行 Microsoft 二进制格式 (MBF) 和 IEEE 浮动点值之间的转换。某些较新的基于 ms-dos 的基本产品必须以不同的方式处理这些函数的版本。例如对于它们使您可以查看的 IEEE 号作为一个字符串,但不将其转换为 MBF。仅提供此处介绍该例程是检索旧的 MBF 数据的一种方法。

这些函数提供 IEEE 之间的转换点的浮动点值和 Microsoft 二进制格式 (MBF) 的浮点值。 下面是一组声明必须包含在一个可视的基本程序调用这些函数中的语句:
   Public Declare Function Cvs Lib "MBF2IEEE.DLL" (X As String) As Single
   Public Declare Function Cvd Lib "MBF2IEEE.DLL" (X As String) As Double
   Public Declare Function Mks Lib "MBF2IEEE.DLL" (X As Single) As String
   Public Declare Function Mkd Lib "MBF2IEEE.DLL" (X As Double) As String
				

下面是每个示例连同这些函数的说明。

CVS 和 CVD 函数

这些函数接受一个 4 字节 (CVS) 或 8 字节 (CVD) 字符串作为参数。他们希望此字串用来分别表示一个单引号或双引号的精度 MBF 值的位模式。函数返回一个 IEEE 结果。
   Dim MBF As String, IEEE As Single
   ' load the string from a file, etc.
   IEEE = CVS(MBF)
				

MKS 和 MKD 函数

这些函数接受一个 IEEE 单个 (MKS) 或加倍 (MKD) 作为参数的精度值。然后,将该值转换成 4 个字节或 8 字节的 MBF 值并返回字符串中。
   Dim MBF AS String, IEEE As Single
   MBF = MKS(IEEE)
   ' Now write the MBF value out to disk
				

潜在的问题

有 IEEE 格式和 MBF 之间的差异。由于这个原因精度可能在转换期间会丢失。也可能是一个数字不能转换,这两种格式之间。Visual Basic 溢出 (错误 # 6) 生成这是否大小写。这是一个可捕获的错误,因此进行相应处理错误。

如何获取 Mbf2ieee.dll

以下文件是可从 Microsoft 下载中心下载:
Mbf2ieee.exe
有关如何下载 Microsoft 支持文件的其他信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
119591如何从联机服务获得 Microsoft 支持文件
Microsoft 扫描此文件的病毒。Microsoft 使用该文件已过帐的日期上获得的最新病毒检测软件。该文件存储在安全性得到增强的服务器,这有助于防止未经授权的情况下对其进行更改文件上。 下载 Mbf2ieee.exe,运行它以获取 Mbf2ieee.dll 源文件和一个 Mbf2ieee.txt 文件后,即一个包含文本的这篇文章的自述文件。

Mbf2ieee.exe 中包含的源代码

除了.dll 本身源代码还提供,因此,您可以进行修改并重新编译,如果您有 Microsoft c。要重新编译,并生成新的.dll 文件必须使用 Microsoft C,因为该例程是特定于 Microsoft C 和依赖于 Microsoft C 返回浮动点值的方法。此源的代码不编译与 Borland c。

若要重新编译与 Microsoft C,使用以下命令行语句生成 DLL:
    cl -ALw -Ow -W2 -Zp -Tp mbf2ieee.c
    link /nod c:\vb\cdk\vbapi.lib mbf2ieee, mbf2ieee.dll, NUL, sdllcew
       oldnames libw, mbf2ieee
    rc -t mbf2ieee.dll
    implib mbf2ieee.lib mbf2ieee.def
				

属性

文章编号: 140520 - 最后修改: 2013年9月27日 - 修订: 2.2
这篇文章中的信息适用于:
  • Microsoft Visual Basic 4.0 专业版
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
关键字:?
kbnosurvey kbarchive kbmt kbdownload kb16bitonly kbfile kbprb kbsample KB140520 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 140520
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com