为什么我使用capicom.dll,使用了名字空间 using namespace capicom 之后对listctrl排序就有问题了。

whiteoak 2004-06-11 04:16:43
如题。在CListCtrl 对象调用 sortitem 时,sortitem的参数中的回调函数就不能正确执行。
...全文
102 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
whiteoak 2004-07-21
  • 打赏
  • 举报
回复
注册时没有问题可以打开证书库,是排序函数有问题
hahu 2004-06-30
  • 打赏
  • 举报
回复
刚开始我也不行,后来发现没有注册dll
regsvr32 capicom.dll
hahu 2004-06-30
  • 打赏
  • 举报
回复
CAPICOM::IStorePtr pIStore(__uuidof(CAPICOM::Store));
这个地方没有把pIStore创建起来,正在查找原因
找到再说了

whiteoak 2004-06-30
  • 打赏
  • 举报
回复
那位大哥帮忙看看阿,跪求
robinzo 2004-06-14
  • 打赏
  • 举报
回复
我觉得也不会,你试试不声明using namespace CAPICOM;然后使用
CAPICOM::的方式。我认为可能还是别的地方有问题。
whiteoak 2004-06-14
  • 打赏
  • 举报
回复
上面的代码已经按robinzo(兔子)老兄的建议改过了,但是还是不行,请各位大哥指点一下
whiteoak 2004-06-14
  • 打赏
  • 举报
回复
m_listTest 是dialog的一个成员 ,是CListCtrl 类。下面调用排序函数
void CViewlisttestDlg::OnColumnclickTestlist(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
m_listTest.SortItems(ListCompare,(LPARAM)&m_listTest);
*pResult = 0;
}
int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
//通过传递的参数来得到CSortList对象指针,从而得到排序方式
CListCtrl* pV=(CListCtrl*)lParamSort;

//通过ItemData来确定数据

CString pInfo1=pV->GetItemText(lParam1,0);
CString pInfo2=pV->GetItemText(lParam2,0);
int iCompRes;
iCompRes=pInfo1.Compare(pInfo2);
return iCompRes ;
};
whiteoak 2004-06-14
  • 打赏
  • 举报
回复
可能是我的调用com的方式不对,请指教一下,我是在oninitdlg里调用的,代码如下
m_listTest.InsertColumn(0,"颁发给",LVCFMT_LEFT, 110,-1);
m_listTest.InsertColumn(1,"颁发者",LVCFMT_LEFT, 110,-1);
m_listTest.InsertColumn(2,"颁发者详细信息",LVCFMT_LEFT, 220,-1);
m_listTest.InsertColumn(3,"截至日期",LVCFMT_LEFT, 110,-1);
HRESULT hr = S_OK;
CListCtrl *pCertList;
pCertList=(CListCtrl *)GetDlgItem(IDC_TESTLIST);
pCertList->SetItemState(3, LVIS_SELECTED, LVIS_SELECTED);
//
// Initialize COM library.
//
CoInitialize(0);
try
{
//
// Open current user My store.
//
_bstr_t bstrName = _T("root");
CAPICOM::IStorePtr pIStore(__uuidof(CAPICOM::Store));

if (FAILED(hr = pIStore->Open(CAPICOM::CAPICOM_LOCAL_MACHINE_STORE,
bstrName,
CAPICOM::CAPICOM_STORE_OPEN_READ_ONLY)))
{
// ATLTRACE(_T("Error [%#x]: pIStore->Open() failed at line %d.\n"), hr, __LINE__);

throw hr;
}

//
// Display all certificate in the store.
//
IUnknownPtr pIUnknown;
IEnumVARIANTPtr pIEnum;
_variant_t pDisp;
ULONG ulFetched;

//
// Get _NewEnum of Certificates collection.
//
if (FAILED(hr = pIStore->Certificates->get__NewEnum(&pIUnknown)))
{
// ATLTRACE(_T("Error [%#x]: pIStore->Certificates->get__NewEnum() failed at line %d.\n"), hr, __LINE__);
throw hr;
}

//
// Get IEnumVARIANT interface of _NewEnum.
//
if (FAILED(hr = pIUnknown->QueryInterface(IID_IEnumVARIANT, (void **) &pIEnum)))
{
// ATLTRACE(_T("Error [%#x]: pIUnknown->QueryInterface() failed at line %d.\n"), hr, __LINE__);
throw hr;
}

//
// Now loop through all items in the collection.
int i=0;
while (pIEnum->Next(1, &pDisp, &ulFetched) == S_OK)
{
//
// Display the certificate.
//
CAPICOM::ICertificate *pCert;
pCert=(CAPICOM::ICertificate2Ptr)pDisp.pdispVal;
pCertList->InsertItem(i,((CAPICOM::ICertificate2Ptr)pDisp.pdispVal)->GetInfo(CAPICOM::CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME),-1);
pCertList->SetItemText(i,1,((CAPICOM::ICertificate2Ptr)pDisp.pdispVal)->GetInfo(CAPICOM::CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME));
pCertList->SetItemText(i,2,pCert->IssuerName);
COleDateTime timenow(pCert->ValidToDate);
pCertList->SetItemText(i,3,timenow.Format(_T("%Y-%m-%d")));
i++;
pDisp.Clear();
}
}
catch (...)
{

}

CoUninitialize();
hwndhwnd 2004-06-12
  • 打赏
  • 举报
回复
不会吧。
能不能贴出重现该问题的代码看看。
Capicom控件跟ListControl冲突的可能性不大。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧