Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Reading a C Real Number with low level 2.6 for DOS
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Codage, syntaxe et commandes
Divers
Thread ID:
00162949
Message ID:
00163450
Vues:
11
This is a message I posted some time ago. Replace the double with float and it should work.

Vlad

>>>
The fastest solution I know:

Put the following function into a C DLL:

extern "C" void __declspec( dllexport )
StringToDouble(LPCSTR tpszDouble, double* tpnDouble)
{
//-- lpnDouble points to the same memory as tpszDouble
double* lpnDouble = (double*)tpszDouble;
//-- Copy the value from lpnDouble to the return param
*tpnDouble = *lpnDouble;
return;
}

extern "C" void __declspec( dllexport )
DoubleToString(double tnDouble, LPSTR tpszDouble)
{
//-- lpszDouble points to the same memory as tnDouble
LPSTR lpszDouble = (LPSTR)&tnDouble;
//-- Copy the value from lpszDouble to the return param
memcpy(tpszDouble, lpszDouble, 8);
//-- Apend a null char to the return param
// (just to be sure it's ok)
tpszDouble[8] = '\0';
return;
}

The declaration in VFP will be:

DECLARE StringToDouble IN ;
MyDll.dll ;
STRING@, DOUBLE@

DECLARE DoubleToString IN ;
MyDll.dll ;
DOUBLE, STRING@

And use them:
*-- lcDouble must have 8 (the length of DOUBLE) + 1 bytes
lcDouble = REPLICATE(chr(0), 9)
lnDoubleIn = 123.45
lnDoubleOut = 0

= DoubleToString(lnDoubleIn, @lcDouble)
= StringToDouble(@lcDouble, @lnDoubleOut)
*-- Now, lnDoubleOut equals lnDoubleIn
<<<
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform