簡體   English   中英

在C ++中將列表作為屬性傳遞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM