我把结构体转换成char *
然后传给DCOM,在DCOM内再把BSTR转换成结构体,
老出现错误,哪位大虾给一点提示!!!!!!!!!!!!!!!!程序如下:
struct A
{
   int iA;
   char cA[10];
}
A A;
A.iA=10;
strcpy(A.cA,"help");
char *pBuf;
pBuf=new char[100];
memcpy(pBuf,(char*)&A,sizeof(A));
PI->Help(_bstr_t(pBuf));
在DCOM中这样处理如下:
STDMETHODIMP COM中函数名::NEEDHELP(BSTR str)
{
    A *B;
    B=(struct A*)(char*)str
}这样B没有转换成功!!!
哪位大虾指点指点.不胜感激>>>>>>>

解决方案 »

  1.   

    问题好像出在:PI->Help(_bstr_t(pBuf));我发现转换成_bstr_t时,把结构点的后几项都去掉了
    ,哪位能想你好方法给整个pBuf传过去
      

  2.   

    我建议你按OLE自动化的规范操作:
    把结构体以字节流写入SAFEARRAY,再将SAFEARRAY的字节读到结构体中.
    字符型在COM传输中,为了节约带宽,是自动将之以零截断的.
      

  3.   

    如何用SAFEARRAY操作,可否给个简单的例子啊
      

  4.   

    写入:
    SAFEARRAYBOUND  bound; //SAFEARRAY的绑定信息bound.lLbound = 0 ; //设数组下标为0
    bound.cElements = sizeof(MYSTRUCT); //设数组的字节数
    //
    SAFEARRAY *  psa = ::SafeArrayCreate( VT_UI1, 1, &bound ); //建立一个数组实例MYSTRUCT   mydata;
    BYTE*   pb = (BYTE*)&mydata;
    for( int i = 0; i < sizeof(MYSTRUCT);i++ )
    {
        SafeArrayPutElement( psa, i, pb+i );// 将字节压入数组.
    }
    ///////////////////////////////////////////////////////////////////////////
    读出:
    UINT cb = SafeArrayGetElemsize( psa ); //取数组字节数
    MYSTRUCT  mydata;
    BYTE*    pb = (BYTE*)&mydata;for( int i =0; i < cb; i++ )
    {
    SafeArrayGetElement(psa, i,pb+i); //读出
    }
    //////////////////////////////////////////////////////////////
      

  5.   

    非常感谢: roscoe(草上飞) !!!!!!