PRB: 將 MBF 轉換成 Visual Basic 的 Windows 中的 IEEE

文章翻譯 文章翻譯
文章編號: 140520 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

徵狀

建立與較舊的 Microsoft Basic 產品的資料檔案 (快速基本,GW-Basic 和 Basica (IBM 及 Compaq 授權 Basic)) 可能不會是可讀取 Windows 的 Visual Basic。

發生的原因

之前以 IEEE 浮點標準正在被廣泛接受,Microsoft 使用已知為 Microsoft 二進位格式 (MBF) 的內部浮動點格式。IEEE 標準引進稍後和變得業界標準。

Microsoft QuickBASIC 和 GW Basic 的早期版本支援僅 MBF 格式。在 Microsoft 基本專業開發系統 (PDS) 和 MS-DOS 的 Visual Basic,函式都可以使用 MBF 與 IEEE 之間轉換格式。如 Microsoft 移向 IEEE 標準的完整的接受度,不過,支援 MBF 格式已被移除。

Windows 的 Visual Basic 使用 IEEE 標準。MBF] 格式不過,是 IEEE 標準與不相容,並且儲存在這種方式中的資料不會容易閱讀。

解決方案

PDS 和 MS-DOS 產品的 Visual Basic 包含 MBF 格式與 IEEE 格式之間轉換的函式。Windows 的 Visual Basic 則無法使用這些函式。以下是這個進退兩難到兩個可能的解決方法:
  1. 程式會重新建立包含 MBF 資料檔案的 MS-DOS 為以 PDS 或 Visual Basic 中撰寫。之後讀入檔案資訊 PDS 或 Visual Basic 的 MS-DOS,您可以使用 MKxMBF $ 函數 (請參閱手冊 PDS 或 Visual Basic 的 MS-DOS 或其說明功能表) 來將資料轉換成 IEEE 格式。這個方法是慣用的原因有二:
    • 它會將轉換成您的資料 IEEE,讓其他程式可以存取您的檔案。
    • 如果您使用方法 2,您的程式將需要額外的 DLL,您必須與您的應用程式一起散發。
  2. 先前,時發生任何方法可以從 Windows 的 Visual Basic 轉換資料。但現在是 DLL 可執行這項操作。這個 DLL (MBF2IEEE.DLL) 包含模擬已存在於某些檢查 DOS 為主的基本產品在 MKS、 MKD、 CVS 及 CVD 函式的函式。這些函式 (MKS、 MKD、 CVS 及 CVD) 不存在於 Visual Basic Windows 的因此這個 DLL 的需求。下面的 「 更多資訊資訊一節提供 DLL 的詳細資料,並說明如何從 「 Microsoft 下載中心 」 下載。

狀況說明

這種行為是經過設計規劃的。

其他相關資訊

兩個方法的相關詳細資料: 使用 Mbf2ieee.dll

注意: 所有這類函數執行 Microsoft 二進位格式 (MBF) 和 IEEE 浮點值之間的轉換。一些較新檢查 DOS 為主基本產品必須以不同方式處理這些函式版本。比方說它們可讓您查看的 IEEE 編號為字串,而不需將它轉換成 MBF。此處所描述的常式只提供作為擷取舊 MBF 資料的方式。

這些函式提供轉換之間 IEEE 浮點值及 Microsoft 二進位格式 (MBF) 浮動點的值。 下面是一組宣告必須包含在 Visual 的基本程式可呼叫這些函式的陳述式:
   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.txt 檔案取得 Mbf2ieee.dll 的 Mbf2ieee.exe 之後,亦即包含本文文字的讀我檔案。

包含在 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 Professional Edition
  • Microsoft Visual Basic 4.0 16-bit Enterprise Edition
關鍵字:?
kbnosurvey kbarchive kbmt kbdownload kb16bitonly kbfile kbprb kbsample KB140520 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本: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