次のコードは、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.
}