描述:
VC为组件,VB调用。
VC中idl 中定义方法HRESULT MessageReceived([in]SAFEARRAY** Message)
SAFEARRAY *pSa;
SAFEARRAYBOUND rgsabound[1];
BYTE bStr[1000]="THIS IS MESSAGE FROM HOST";
UINT strLen = strlen((char*)bStr);
rgsabound[0].cElements = strLen;
rgsabound[0].lLbound = 0;
pSa = SafeArrayCreate(VT_UI1,1,rgsabound);
for(long index=0; index < (long)strLen; index++)
{
if(FAILED(SafeArrayPutElement(pSa,&index, &bStr[index])))
::MessageBox(NULL,"error。","提示",MB_OK ¦ MB_ICONWARNING);
}
Fire_MessageReceived(&pSa);
VB中
Private Sub m_piCommsLink_MessageReceived(Message() As Byte)
Dim lsMessage As String
lsMessage = ByteArrayToString(Message)
LogAdd "CommsLink EVENT ARRIVED: MessageReceived( Message=" & lsMessage & ")"
End Sub
结果vb接收不到vc的事件,如果把传送的参数修改为任意其他类型都没有问题。请问safearray这样用可以吗?不能的话应该怎么修改?