Đoạn mã sau nằm trong một thiết bị sẽ phát hành một thiết bịId (LXdeviceInfo) khi được liệt kê thông qua một kết nối ổ cắm IrDA. Điều này chỉ quan trọng để giải thích tại sao tôi muốn giữ các kiểu dữ liệu tương tự nhất có thể, nhưng có thể biên dịch bằng cách sử dụng ansi CCó cách nào để sửa đổi khối cấu trúc C++ cấu trúc này để làm việc trong thẳng C
Với #includes of windows.h và af_irda.h, mã sau đây biên dịch không lỗi trong trình biên dịch C++, nhưng ngắt trong trình biên dịch C ngay dưới cấu trúc gán (xem L ERI ở đây). Lý tưởng nhất là tôi muốn khởi tạo thành viên cấu trúc 'ID' thành một mảng ký tự trong khi vẫn giữ nó giống như trong mã ban đầu để tôi có thể kiểm tra giá trị của LXdeviceInfo giống như nó sẽ xuất hiện khi truy vấn nó gọi đến thiết bị từ kết nối ổ cắm PC.
Có cách nào để sửa đổi khối gán này để hoạt động ở chế độ C thẳng không?
#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.
}
Thử xóa dấu ngoặc đơn khỏi PROD_FAMILY_NAME. –
Theo như tôi có thể nói rằng cần phải hợp lệ C cũng. Có thể dấu ngoặc đơn xung quanh chuỗi rối tung lên? Hoặc có lẽ việc gán mảng không được thực hiện bởi vì một unsigned char và char không hoàn toàn phù hợp. –
@ryyker những gì thay thế những định nghĩa với 'const' và' typedef' tương đương của họ? – greatwolf