现在制作一个COM控件,在web页面上用jsp来调用。现在想由COM组件返回一个结构体,这个结构体在wincrypt.h中定义,是vs自带的,定义如下:
typedef struct _CERT_CONTEXT {
    DWORD                   dwCertEncodingType;
    BYTE                    *pbCertEncoded;
    DWORD                   cbCertEncoded;
    PCERT_INFO              pCertInfo;
    HCERTSTORE              hCertStore;
} CERT_CONTEXT, *PCERT_CONTEXT;
typedef const CERT_CONTEXT *PCCERT_CONTEXT;COM中的代码如下
STDMETHODIMP Ctestfun::getCertTest(VARIANT* bbb)
{
HCERTSTORE hCertStore;
PCCERT_CONTEXT pCertContext = NULL;
//打开MY证书库(个人证书存储区)
hCertStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM_W, 0, 0, CERT_STORE_OPEN_EXISTING_FLAG | CERT_SYSTEM_STORE_CURRENT_USER, L"MY");
if (hCertStore){
//枚举最后一个证书库中证书
while(pCertContext = CertEnumCertificatesInStore(hCertStore, pCertContext)) {

}
CertCloseStore(hCertStore,0);
}
        //这里,想将pCertContext输出,由jsp来接收。写了一个测试程序,pCertContext是肯定赋值了的
        bbb = pCertContext;  //这样写肯定不对,该怎么写呢?
return S_OK;
}http页面使用
<object id="myCOMTest1" name="myCOMTest1"
codebase="download1/test1.CAB#Version=1,0,0,1"
classid="clsid:83177DE2-1602-48C4-8D23-4AD47AB25D59">
</object>
jsp中
var aaa = myCOMTest1.getCertTest();现在是在COM中的bbb = pCertContext;  这一句该怎么写?
我把输出变量设定为VARIANT*类型,提示无法转换jsp接收到变量后该怎么使用呢,aaa.结构成员名,这样可以吗?
大大们帮忙呃

解决方案 »

  1.   

    就是COM组件返回一个结构类型的数据,jsp接收到这个类型再来处理
      

  2.   

    COM组件返回一个SAFEARRAY,Variant等类型,然后jsp等把它当初数组来处理,VBArray...
    jsp不能孩子接处理结构体..
      

  3.   

    com组件返回safearray有例子吗?有的话发给我研究下呃
      

  4.   

    CComSafeArray,拼接数组
    http://blog.csdn.net/pimshell/archive/2008/08/04/2768206.aspx
      

  5.   

    这个帖子不是这内容得嘛,是COM组件输出参数为safearray,这个safearray怎么包含那个结构体的数据
      

  6.   

    pCertContext
    设为一个XML字符串
    格式自己定
    getCertTest([out,retval]VARIANT* bbb) 
    然后
    bbb.vt=VT_BSTR;
    bbb.bstr=pCertContext;
      

  7.   

    在COM中使用数组参数-SafeArray:
    http://www.host01.com/article/software/cc/20060917233039757.htm
      

  8.   

    SAFEARRAY使用方法示例:
    blog.csdn.net/absurd/archive/2006/06/10/786822.aspx
      

  9.   

    可以考虑使用JS脚本:com自动化控件与JavaScript脚本交互数组方法:
    blog.csdn.net/jkler_doyourself/archive/2008/08/08/2786643.aspx
      

  10.   

    我将vt设置为VT_RECORD;一样还是有问题
      

  11.   

    还是没解决ag
    做一个产品,希望在页面中调用COM组件,组件能返回一个自定义结构的数组,页面上能取得返回的值,并获得数组中每个结构中对象的值,该怎么做呢现在做一个ATL COM组件,组件返回一个自定义结构数组,结构如下:
    typedef struct _MYCERT_CONTEXT {
    DWORD ver;
    BSTR name;
    } MYCERT_CONTEXT, *PMYCERT_CONTEXT;
    实现如下:
    STDMETHODIMP CmyCerts::getArray(VARIANT* pvar){
    pCertInfo[0]->ver = 1;
    pCertInfo[0]->name = "aaaa";
    pCertInfo[1]->ver = 2;
    pCertInfo[1]->name = "bbbb";
    m_sa.Add(CComVariant(pCertInfo[0]));
    m_sa.Add(CComVariant(pCertInfo[1]));
    //m_sa在.h文件中定义 CComSafeArray<VARIANT> m_sa;
    CComVariant var(m_sa);
    var.Detach(pvar);
    return S_OK;
    }在页面中javascript代码:
    function UpdateList()
    {
    var i = 0;
    var arrayCerts = myCerts.getArray();
    //希望能像这样使用返回的数组
    for(var i = 0; i < arrayCerts.length ; i++) {
    //for(var nCntr = arrayCerts.lbound(1); nCntr <= arrayCerts.ubound(1); nCntr++)
    var oOption = document.createElement("OPTION");
    oOption.text = arrayCerts[i].name; //CmyCerts::getArray()的实现肯定有问题,不知道该怎么写,请问该怎么做,是不是需要把结构定义写到idl文件中去?
    在页面中该如何取得返回的自定义结构数组,如何使用呢?
    如果有点COM和javascript的源代码更好,只需要很简单的自定义结构数组传输和调用的例子就好,希望能给点提示,谢谢啦