Что-то я запарился с этой штукой. Короче, нужна функция вот с таким прототипом:
C++ Source Code:
int ParseString(wchar_t * wcIn, wchar_t ** wcOut);
Т.е. подаем ей строчку в юникоде (а ля "словораз; словодва; словотри"), получаем массив юникодовых строчек и возвращаем количество строк. Писал так:
C++ Source Code:
1
int ParseString(CComBSTR Input, CComBSTR **Output)
2
{
3
long l = sizeof Input;
4
long i = 0, lC = 0;
5
CComBSTR *buf;
6
7
while (i <= l){
8
CComBSTR tmp(L"");
9
while (' ' == Input[i]) i++;
10
while ((';' != Input[i])&&(i <= l)){
11
tmp +=Input[i];
12
i++;
13
}
14
if (lC){
15
buf = *Output;
16
*Output = new CComBSTR[lC+1];
17
for(long k=0; k<lC; k++) *Output[k] = buf[k];
18
}
19
else{
20
*Output = new CComBSTR[1];
21
}
22
*Output[lC] = tmp;
23
lC++;
24
}
25
return lC;
26
}
Не работает.
Добавлено 31-07-2008 в 16:11:
ага, часть косяка нашел - long l = Input.Length();
раз уж все равно CComBSTR использую.
Добавлено 31-07-2008 в 17:15:
Делаю через wcstok, получиться - расскажу
Добавлено 31-07-2008 в 17:26:
C++ Source Code:
1
int ParseAlias(CComBSTR Input, CComBSTR **Output)
2
{
3
const wchar_t *d = L";";
4
wchar_t *v, *nt;
5
int lC = 0;
6
CComBSTR *pBuf, *pTmp;
7
8
v = wcstok_s(Input, d, &nt);
9
while (v){
10
if (lC){
11
pBuf = pTmp;
12
pTmp = new CComBSTR[lC+1];
13
for (int i=0; i<lC; i++) pTmp[i] = pBuf[i];
14
}
15
else
16
pTmp = new CComBSTR[1];
17
pTmp[lC] = v;
18
lC++;
19
v = wcstok_s(NULL, d, &nt);
20
}
21
*Output = pTmp;
22
return lC;
23
}
Добавлено 31-07-2008 в 17:28:
И почему себе в репу +10 поставить?
Пусть висит, ведь на самом деле фиг найдешь по гуглю, как правильно это делать, иначе я бы столько времени не потратил.
Короче, передаю в функцию этот самый набор строк. Как его лучше передать - как CComBSTR *pAlias или как CComBSTR pAlias[]?
Конкретно, мне нужно узнать количество строк, чтоб не таскать их из функции в цункцию от момента заполнения. sizeof всегда выдает мне 4, видимо, это размер указателя в байтах.
Я уж и забыл про этот тред! Я тогда при формировании списка последним элементом какой-то значок добавлял и обрабатывал потом до его первого вхождения, решил в лоб.