[英]Passing a list as an attribute in C ++
我需要創建一個LPSTR
列表並將其放在struct的LPSTR
屬性中。
typedef struct _wfs_pin_caps
{
...
LPSTR lpszExtra; //This attribute should receive
} WFSPINCAPS, * LPWFSPINCAPS;
我需要這種東西。
WFSPINCAPS PinCapabilities;
list<LPSTR> Keys;
Keys[0] = (LPSTR) "value=key";
Keys[1] = (LPSTR) "value1=key1";
Keys[2] = (LPSTR) "value2=key2";
PinCapabilities.lpszExtra = Keys;
我需要傳遞具有VARIOUS值的列表......
這很簡單,就這樣做
struct _wfs_pin_caps {
// ... other fields ...
std::list<const LPSTR> lpszExtra;
};
list<const LPSTR> &extra(PinCapabilities.lpszExtra);
extra.push_back(TEXT("value1=key1"));
extra.push_back(TEXT("value2=key2"));
// ... more items ...
extra.push_back(TEXT("valueN=keyN"));
閱讀有關TEXT
宏的內容,這樣你根本不會做那個笨拙的演員,這是錯誤的BTW。
注意:你可能應該需要std::vector
,閱讀他們的文檔來決定。
這是一個純粹的cen-xfs,所以只有C ++知識是不夠的。 XFS結構的所有lpszExtra字段都是特殊格式的C字符串。
因此,填充xfs功能結構的lpszExtra字段的正確方法是使用雙NULL終止和NULL分隔的字符串。 因為所有這些字段都是鍵值對,所以格式為:“key1 = value1 \\ 0key2 = value2 \\ 0 ... \\ 0keyN = valueN \\ 0 \\ 0”注意這里“keyX”並不意味着PINPAD鍵定義,但所有XFS lpszExtra字段數據的格式化方式首先是key_name = -sign key_value。
你如何處理這些字符串取決於你,但我喜歡使用普通的換行符而不是'\\ 0'作為鍵值對分隔符然后只是轉換為/從它轉換為XFS特定的NULL char分隔和雙NULL終止格式。
這樣,您可以使用普通的C字符串方法在您自己的代碼中進行操作。
輕松轉換是分配內存,復制和交換'\\ n'到'\\ 0'和'\\ 0'到“\\ 0 \\ 0”,同時從C字符串復制到XFS,當從XFS轉換為C字符串時反向。
請注意,這僅適用於XFS結構中的lpszExtra字段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.