次のコードは、IrDAソケット接続で列挙されたときにdeviceId(LXdeviceInfo)を発行するデバイスに存在します。これは、データ型を可能な限り似ているが、ANSI Cを使用してコンパイルできる理由を説明するためにのみ重要です。このC++構造体割り当てブロックを直接的に変更する方法はありますか?
windows.hとaf_irda.hを#includeすると、次のコードはno C++コンパイラではエラーが発生しますが、Cコンパイラは構造体割り当てのすぐ下にあります(ここではERRORを参照)。理想的には、構造体メンバを '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.
}
PROD_FAMILY_NAMEからカッコを削除してみます。 –
私が知る限り、有効なCでなければなりません。おそらくそれを台無しにする文字列の周りのかっこですか?あるいは、配列の代入が取られていないかもしれません。なぜなら、unsigned charとcharがまったくマッチしていないからです。 –
@ryykerそれらを 'const'と' typedef'に相当するもので置き換えるのはどうですか? – greatwolf