As the problem is with ReadFile, then the format of data stored in the file must be correct as fread works. The following test program (with no error checking as just a quick test) writes a double to a file using fwrite then reads it from the file using both fread and ReadFile and in both cases produces the correct output.
Code:
#include <stdio.h>
#include <windows.h>
int main ()
{
double val = 12.54;
double x,
rfx;
FILE* pFile;
DWORD dwRead;
HANDLE fh;
pFile = fopen("double", "wb");
fwrite(&val, sizeof(double), 1, pFile);
fclose(pFile);
x = 0;
pFile = fopen("double", "rb");
fread((char*)&x, sizeof(double), 1, pFile);
printf("read : %f\n", x);
fclose(pFile);
rfx = 0;
fh = CreateFile("double", FILE_READ_DATA, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
ReadFile(fh, (char*)&rfx, sizeof(double), &dwRead, NULL);
printf("ReadFile : %f\n", rfx);
return (0);
}