2012-03-13 2 views
0
SAFEARRAYBOUND bound[1] = {25, 0}; 
SAFEARRAY * psa = SafeArrayCreate(VT_UI1, 1, bound); 
for(long int i = 0; i <25; i++) 
    SafeArrayPutElement(psa, &i,sendBuf[i]); 

Я пытаюсь создать safearray из массива символов, но получаю эту ошибку cannot convert from char to void* sendBuf является массивом символовне может конвертировать из полукокса к мочеиспусканию *

+3

вам, вероятно, нужно сказать нам определение SAFEARRAY/СОБЛЮДАТЬ –

+1

@user Что является 'sendBuf'? Если это массив символов, то 'sendBuf [i]' дает символ в этом индексе. – Mahesh

+0

Вы также забыли указать ошибку, которую вы получаете. – Chriszuma

ответ

3

Вы не показали нам эту ошибку, но SafeArrayPutElement принимает указатель к элементу как третий параметр. Я считаю, что это будет работать, если вы используете:

SafeArrayPutElement(psa, &i, &sendBuf[i]); 

Обратите внимание на &.

+0

Я думаю, что технически говоря, OP должен создать этот массив с VT_I1, так как источник 'sendBuf' является подписанным типом. – mkb

1

Было бы более эффективным в этом случае использовать SafeArrayAccessData() вместо SafeArrayPutElement():

SAFEARRAYBOUND bound[1] = {25, 0}; 
SAFEARRAY * psa = SafeArrayCreate(VT_UI1, 1, bound); 
void *pvData; 
SafeArrayAccessData(psa, &pvData); 
memcpy(pvData, sendBuf, 25); 
SafeArrayUnaccessData(psa); 

Или:

SAFEARRAYBOUND bound[1] = {25, 0}; 
SAFEARRAY * psa = SafeArrayCreate(VT_UI1, 1, bound); 
unsigned char *pvData; 
SafeArrayAccessData(psa, (void**)&pvData); 
for(long int i = 0; i <25; i++)  
    pvData[i] = sendBuf[i]; 
SafeArrayUnaccessData(psa); 
Смежные вопросы