У меня есть приложение в Visual Studio 2015, которое получает определенную структуру, как указатель памяти, с некоторыми полями из приложения в LabWindows CVI, которое записывает в сокет. Затем я преобразовываю память в ту же структуру в моем приложении. Код выглядит так:
DT_ULLong data;
wait_msg(...,...,&data);
XC_GEN_MSG* gen_msg = (XC_GEN_MSG*)data;
float var = gen_msg->varFloat;
//var has trash values
...
структуры:
typedef struct _XC_GEN_MSG
{
XC_SERVER_MSG_HEADER Header;
DT_ULong data; //unsigned long long int
} XC_GEN_MSG;typedef struct
{
unsigned char word[8];
unsigned int num_image;
unsigned int num_pixels_az;
unsigned int num_pixels_dist;
unsigned int rawtime_ms;
unsigned int rawtime_time_t;
unsigned int PW;
unsigned int PRI;
unsigned int Range;
unsigned int PW_Digit;
unsigned int Integrated_pulses_AZ;
unsigned int Rotation_time;
unsigned int bytes_per_pixel;
unsigned int bytes_digit;
DT_UEncoder UD_AZ_RESOLUTION; // typedef unsigned short DT_UEncoder;
float f_az_resolution;
unsigned int Status_bitfield;
float Lat;
float Long;
float wind_speed;
float wind_direction;
float speed;
float course;
unsigned int comand;
unsigned int valor_comand;
} XC_SERVER_MSG_HEADER;
Все поля правильно отлиты, и я вижу правильные значения, но поля с плавающей запятой (в данном случае varFloat) всегда с мусором (обычно близко к 0, но иногда, например, 2 * e24).
Я предполагаю, что это может быть связано с проблемами компиляции или копированием памяти, но интересная часть заключается в том, что он работает в 32-версии приложения, а не в 64-версии.
Где может быть проблема и как я могу ее решить?
Спасибо!
Задача ещё не решена.
Других решений пока нет …