C++ 无法从char转换为void* SAFEARRAYBOUND绑定[1]={25,0}; SAFEARRAY*psa=SafeArrayCreate(VT_UI1,1,绑定); 对于(long int i=0;i

C++ 无法从char转换为void* SAFEARRAYBOUND绑定[1]={25,0}; SAFEARRAY*psa=SafeArrayCreate(VT_UI1,1,绑定); 对于(long int i=0;i,c++,windows,C++,Windows,您没有向我们显示错误,但它似乎将指向元素的指针作为第三个参数。我相信如果您使用: 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]); 请注意,&您没有向我们显示错误,但它似乎将指向元素的指针作为第三个参数。

您没有向我们显示错误,但它似乎将指向元素的指针作为第三个参数。我相信如果您使用:

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

请注意,
&
您没有向我们显示错误,但它似乎将指向元素的指针作为第三个参数。我相信如果您使用:

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

注意
&
在这种情况下,使用
SafeArrayAccessData()
而不是
SafeArrayPutElement()
会更有效:

或:

SAFEARRAYBOUND绑定[1]={25,0};
SAFEARRAY*psa=SafeArrayCreate(VT_UI1,1,绑定);
无符号字符*pvData;
安全阵列访问数据(psa,(无效**)和pvData);

对于(long int i=0;i而言,在这种情况下,使用
SafeArrayAccessData()
而不是
SafeArrayPutElement()
,效率会更高:

或:

SAFEARRAYBOUND绑定[1]={25,0};
SAFEARRAY*psa=SafeArrayCreate(VT_UI1,1,绑定);
无符号字符*pvData;
安全阵列访问数据(psa,(无效**)和pvData);

对于(long int i=0;i),您可能需要告诉我们SAFEARRAY的定义/BOUND@user什么是
sendBuf
?如果是字符数组,则
sendBuf[i]
给出了该索引处的字符。您还忘了包含所得到的错误。这里定义了SAFEARRAY:SAFEARRAYBOUND也在该部分中。@mkb-没有意识到这是microsoft的“标准”调用,因为它没有被称为长指针\u指向\u安全\u数组\u边界,并且没有将大型不透明结构作为第一个参数;-)您可能需要告诉我们SAFEARRAY的定义/BOUND@user什么是
sendBuf
?如果是字符数组,则
sendBuf[i]
给出了该索引处的字符。您还忘了包含所得到的错误。这里定义了SAFEARRAY:SAFEARRAYBOUND也在该部分中。@mkb-没有意识到这是microsoft的“标准”调用,因为它没有被称为长指针\u指向\u安全\u数组\u边界,并且没有将大型不透明结构作为第一个参数;-)我认为,从技术上讲,OP应该用VT_I1创建这个数组,因为源
sendBuf
是有符号类型。我认为,从技术上讲,OP应该用VT_I1创建这个数组,因为源
sendBuf
是有符号类型。
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);