看过别人的例子,在ASP程序中,通过  Tmp = .Read 方式读取到COM控件的数据。这个Read 的参数只有一个,
    即BSTR* pVal,STDMETHODIMP CControl1::get_Read(BSTR* pVal)。      在我的COM控件的Read属性中,该属性下有一个结构体,现在我的问题是,在ASP程序中如何分别读取到结构体中的数据,然后在网页中显示出来??
    谢谢各位指点。

解决方案 »

  1.   

    可以把结构体的各个字段拆出来,用VARIANT数组进行传递
      

  2.   

    http://topic.csdn.net/u/20091105/11/7c3934a1-7911-45e1-9270-144fc6029829.html
    这里有更加详细的讲解
      

  3.   

     
      谢谢Tr0j4n给出的网址,那网址的这些代码对我有用,
       STDMETHODIMP  CAXSampleCtl::PutData(VARIANT  *val)
    {
        CComSafeArray<VARIANT> m_psa; //封装m_sa数组
        CComSafeArray<VARIANT> m_sa;  //这个数组用于封装MyData数据接口    m_sa.Add(CComVariant(8));
        m_sa.Add(CComVariant(2));
        m_sa.Add(CComVariant(L"LZY1"));
        m_psa.Add(CComVariant(m_sa));
        m_sa.Destroy();    m_sa.Add(CComVariant(11));
        m_sa.Add(CComVariant(5));
        m_sa.Add(CComVariant(L"LZY2"));
        m_psa.Add(CComVariant(m_sa));
        m_sa.Destroy();    m_sa.Add(CComVariant(13));
        m_sa.Add(CComVariant(4));
        m_sa.Add(CComVariant(L"LZY3"));
        m_psa.Add(CComVariant(m_sa));
        m_sa.Destroy();    m_sa.Add(CComVariant(15));
        m_sa.Add(CComVariant(1));
        m_sa.Add(CComVariant(L"LZY4"));
        m_psa.Add(CComVariant(m_sa));
        m_sa.Destroy();    
        
        CComVariant var(m_psa); 
        var.Attach(val);
    }
      有两个问题不清楚:
       1、为什么要用到两个数组 m_psa和m_sa?后面的注释说得笼统了,能否详细点。
       2、最后两句代码怎么理解CComVariant var(m_psa); var.Attach(val);
         谢谢!
      

  4.   

      1、为什么要用到两个数组 m_psa和m_sa?后面的注释说得笼统了,能否详细点。
    ---------------------------
     你完全没看懂这些代码。
    m_sa.Add(CComVariant(8));
      m_sa.Add(CComVariant(2));
      m_sa.Add(CComVariant(L"LZY1"));
      m_psa.Add(CComVariant(m_sa));
      m_sa.Destroy();  m_sa.Add(CComVariant(11));
      m_sa.Add(CComVariant(5));
      m_sa.Add(CComVariant(L"LZY2"));
      m_psa.Add(CComVariant(m_sa));
      m_sa.Destroy();像如上的代码,其实代表的意思就等于是每次m_sa里面就是一个对象,那个对象有3个字段。
    而m_psa里面放的则是多个对象,是对象的数组  2、最后两句代码怎么理解CComVariant var(m_psa); var.Attach(val);
    ---------------------------
    还用解释吗?
      

  5.   

    List<myStruct> m_psa;struct myStruct m_sa;
    m_sa.x=1;
    m_sa.y=2;
    m_sa.name="tr0j4n";
    m_psa.add(m_sa);struct myStruct m_sa2;
    m_sa2.x=6;
    m_sa2.y=2;
    m_sa2.name="LZ";
    m_psa.add(m_sa2);懂了吗?
      

  6.   


    谢谢你的讲解,同时也让我看懂了javascript代码中两个参数的意义 data.getItem(n,0),n代表第n个对象,0代表第n个对象的第0个字段。
       现在想问你另外一个问题:
    我在a.h中定义一个结构体
    typedef struct _SData
    {
    char date[11];
    char time[9];   
    char lon[11]; 
     
    }SData,*PSData;
    extern PSData pGData = NULL;在b.cpp中这样
    char wd[11];
     int i;
     for(i=0;i<11;i++)
     {
     wd[i] = * pGData ->lon[i];
     }
    编译提示错误是:error C2100: illegal indirection
    是这句 wd[i] = * pGData ->lon[i];错了,怎么修改,谢谢你。