Передача списка в качестве атрибута в C ++

Мне нужно создать список 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;

Мне нужно передать списки с различными значениями …

1

Решение

Это просто, просто сделай это

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 вместо этого, прочитайте их документацию, чтобы решить.

0

Другие решения

Это чистая вещь cen-xfs, поэтому просто знание C ++ недостаточно.
Все поля lpszExtra структур XFS являются специальными отформатированными C-строками.

Таким образом, правильный способ заполнить поле lpszExtra структуры возможностей xfs — использовать строку с двойным завершением NULL и разделенную NULL.
И так как все эти поля являются парами ключ-значение, формат имеет вид:
«key1 = value1 \ 0key2 = value2 \ 0 … \ 0keyN = valueN \ 0 \ 0» Обратите внимание, что здесь «keyX» НЕ означает определение ключа PINPAD, но формат всех данных поля XFS lpszExtra отформатирован так, что first key_name = -sign key_value.

То, как вы обрабатываете эти строки, зависит от вас, но я предпочитаю использовать обычные символы новой строки вместо ‘\ 0’ в качестве разделителей пары ключ-значение, а затем просто преобразовать их в / из этого в специфичный для XFS формат NULL, разделенный символами, и двойной формат NULL с завершением.

Таким образом, вы можете использовать обычные строковые методы C для манипуляции в вашем собственном коде.

Простое преобразование заключается в выделении памяти, копировании и замене ‘\ n’ на ‘\ 0’ и ‘\ 0’ на «\ 0 \ 0» при копировании из строки C в XFS и в обратном порядке при преобразовании из строки XFS в C.

Обратите внимание, что это применимо только к тем полям lpszExtra в структурах XFS.

0