1

我需要创建一个列表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;

我需要传递具有各种值的列表...

4

2 回答 2

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

阅读关于的信息,TEXT这样你就不会做那种尴尬的演员,顺便说一句,这是错误的。

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

于 2017-03-09T14:17:49.427 回答
0

这是一个纯粹的 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 字符分隔和双 NULL 终止格式。

这样您就可以使用普通的 C 字符串方法在您自己的代码中进行操作。

简单的转换是分配内存,复制和交换 '\n' 到 '\0' 和 '\0' 到 "\0\0",同时从 C 字符串复制到 XFS 并在从 XFS 转换到 C 字符串时反向。

请注意,这仅适用于 XFS 结构中的那些 lpszExtra 字段。

于 2017-03-09T23:55:12.460 回答