以下代码驻留在一个设备中,当通过 IrDA 套接字连接枚举时,该设备将发出一个 deviceId (LXdeviceInfo)。这仅对解释为什么我想保持数据类型尽可能相似但能够使用 ansi C 进行编译很重要
使用 windows.h 和 af_irda.h 的#includes,以下代码在 C++ 编译器中编译时没有错误,但在结构赋值下方的 C 编译器中中断(请参阅此处的错误)。理想情况下,我想将结构成员“ID”初始化为一个字符数组,同时保持它在原始代码中的类型,这样我就可以测试 LXdeviceInfo 的值,就像从调用该设备从 PC 插座连接。
有没有办法修改这个分配块以在直接 C 中工作?
#include <windows.h>
#include <af_irda.h>
#define IR_HINT_COMPUTER 0x04
#define IR_HINT_EXT 0x80
#define IR_HINT_OBEX 0x20
#define IR_HINT_IRCOMM 0x04
#define IR_CHAR_ASCII 0
#define PROD_FAMILY_NAME ("product name goes here")
#define uint8_t unsigned char
const struct {
uint8_t hint1;
uint8_t hint2;
uint8_t charset;
uint8_t ID[sizeof(PROD_FAMILY_NAME)];
} devInfoStorage =
{
IR_HINT_COMPUTER | IR_HINT_EXT, // hint1
IR_HINT_OBEX | IR_HINT_IRCOMM, // hint2
IR_CHAR_ASCII, // charset
PROD_FAMILY_NAME // Prod ID string
}; // ERROR here: Innvalid initialization type: found 'pointer to char' expected 'unsigned char'
const uint8_t *LXdeviceInfo = (uint8_t *) &devInfoStorage;
/* The size of the device info */
const uint8_t LXdeviceInfoLen = sizeof(devInfoStorage);
void main(void)
{
#define DEVICE_LIST_LEN 10
unsigned char DevListBuff[sizeof (DEVICELIST) -
sizeof (IRDA_DEVICE_INFO) +
(sizeof (IRDA_DEVICE_INFO) * DEVICE_LIST_LEN)];
int DevListLen = sizeof (DevListBuff);
PDEVICELIST pDevList;
pDevList = (PDEVICELIST) & DevListBuff;
//code continues.
}