在C ++中将列表作为属性传递

时间:2017-03-09 14:15:12

标签: c++ dll cen-xfs

我需要创建一个LPSTR列表,并将其放在结构的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值的列表......

2 个答案:

答案 0 :(得分:0)

这很简单,只需这样做

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"));

了解The TEXT macro所以你根本不做那个尴尬的演员,这是错误的BTW。

注意:您可能需要std::vector,而不是阅读他们的文档来决定。

答案 1 :(得分:0)

这是一个纯粹的cen-xfs,所以只有C ++知识是不够的。 XFS结构的所有lpszExtra字段都是特殊格式的C字符串。

因此,填充xfs功能结构的lpszExtra字段的正确方法是使用双NULL终止和NULL分隔的字符串。 由于所有这些字段都是键值对,因此格式为: “键1 =值\ 0key2 =值2 \ 0 ... \ 0keyN =值N \ 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字段。