现在制作一个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.结构成员名,这样可以吗?
大大们帮忙呃
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.结构成员名,这样可以吗?
大大们帮忙呃
jsp不能孩子接处理结构体..
http://blog.csdn.net/pimshell/archive/2008/08/04/2768206.aspx
设为一个XML字符串
格式自己定
getCertTest([out,retval]VARIANT* bbb)
然后
bbb.vt=VT_BSTR;
bbb.bstr=pCertContext;
http://www.host01.com/article/software/cc/20060917233039757.htm
blog.csdn.net/absurd/archive/2006/06/10/786822.aspx
blog.csdn.net/jkler_doyourself/archive/2008/08/08/2786643.aspx
做一个产品,希望在页面中调用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的源代码更好,只需要很简单的自定义结构数组传输和调用的例子就好,希望能给点提示,谢谢啦