Newsgroup: it.comp.lang.visual-basic
Titolo: Vecchie funzioni QB e VB-DOS (CVx e MKx) in VB6

Con il vecchio QB, ma anche con il VB per DOS, potevo usare
delle funzioni chiamate genericamente CVx e MKx per convertire
un numero (intero, decimale etc) nel formato MBF (Microsoft Binary
Format)
Un numero intero semlice, che internamente è rappresentato da
2 byte, veniva convertito quindi in 2 caratteri, un numero decimale
a doppia precisione (8 Byte) veniva convertito in 8 caratteri, etc.
Queste funzioni purtroppo non sono presenti in VB6 (e a quanto
pare nemmeno negli altri VB per Windows), ma leggendo la MSDN
ho trovato una libreria chiamata "MBF2IEEE.DLL".
Purtroppo non funziona! Non so se perchè era prevista per il VB3
(si capisce dal file leggimi allegato) e quindi a 16-bit o perchè
sto usando VB6 sotto Windows 2000 o per qualche altro motivo.
Ho poi trovato il seguente:
"HOWTO: Create an OLE Server to Implement "Thunking" (Q141939)",
solo che richiede il VB4 a 16-bit per creare un "OLE server"
da inserire come riferimento in VB.
Questo ole server è composto da una classe che richiama la "MBF2IEEE.DLL":
Private Declare Function cvs Lib "mbf2ieee.dll" (x As String) As Single
Private Declare Function cvd Lib "mbf2ieee.dll" (x As String) As Double
Private Declare Function mks Lib "mbf2ieee.dll" (x As Single) As String
Private Declare Function mkd Lib "mbf2ieee.dll" (x As Double) As String
Public Function CvsOle(x As String) As Single
    CvsOle = cvs(x)
End Function
Public Function cvdole(x As String) As Double
    cvdole = cvd(x)
End Function
Public Function mksole(x As Single) As String
    mksole = mks(x)
End Function
Public Function mkdole(x As Double) As String
    mkdole = mkd(x)
End Function
Sono riuscito a compilare il tutto con il VB4 a 16-bit, ho aggiunto
il riferimento all'ole server nel mio vb6 ed infine ho provato
a convertire qualche valore.
Pare funzionare tutto, però non i dati sono completamente sballati
rispetto a quelli che leggevo con il VB per DOS.
Ad esempio la stringa dai seguenti 8 caratteri (riporto il valore ascii):
53  217  252  182 65  225  242  192
che voglio convertire in un Double-Precision:
con il VB per DOS ottengo: -77332.1071747288
con il VB6 per Windows ottengo: -1,75013418811204E+19
Non so se ho sbagliato qualche cosa oppure è un problema
della libreria...
A qualcuno è già capitato?
Ho pensato anche al problema della visualizzazione dei caratteri
infatti con il VB per DOS (eseguito sotto windows), sia dentro una
finestra di windows che a tutto schermo vedo dei caratteri.
Se li copio e li incollo ne vedo altri e se poi li inserisco
usando il tasto ALT+numero ascii altri ancora
5Ùü¶AáòÀ    'Questo è quello che vede VB leggendo dal File ed è
            'uguale a quello che ottengo con ALT+nnnn all'interno di VB6
5+³ÂAß=+    'Questo è quello che ottengo con ALT+nnn all'interno di VB6
5+³ÂAß=+    'Questo è quello che ottengo con ALT+nnn da OE6
Se provo a copiare questa ultima stringa da OE6 a VB6 ottengo la precedente
--
Daniele Pinna  (leva oops. per rispondere) * ICQ "chiedilo"
Sito Web: Il DoCFa in Pillole: 
www.dapinna.com

 Format)
[cut]
Ho risolto...
Usavo semplicemente un metodo di lettura sbagliato
(ma forse era corretto con il vecchio QB???)
Praticamente eseguivo la lettura così:
    Get #ff, pLettura, Stringa$
per poi convertire Stringa in un numero, quando
leggendo così:
    Get #ff, pLettura, ADouble#
avevo già il numero bello è pronto :-))
