colesafearray如何使用DISPPARAMS和SAFEARRAY

colesafearray  时间:2021-07-11  阅读:()

用VC++6.0编写串口通信的程序出现下面的错误提示,求解,谢谢……利用的是mscomm控件错误提示在问题补充中

这个问题出现一般都是变量出现问题了,你去看看问题里面显示的那几个变量,尝试先//消去后的反应。

我做的时候也经常遇到,不要被他吓到了。





如何使用DISPPARAMS和SAFEARRAY

1> DISPPARAMS配合BSTR使用,在调用的函数结束后释放内存LRESULT CMainDlg::OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/){ // TODO: Add validation code DISPPARAMS param; param.cArgs = 3; param.cNamedArgs = 0; param.rgdispidNamedArgs = NULL; param.rgvarg = new VARIANTARG[3]; param.rgvarg[0].vt = VT_BSTR; param.rgvarg[0].bstrVal = SysAllocString(L"A000"); param.rgvarg[1].vt = VT_BSTR; param.rgvarg[1].bstrVal = SysAllocString(L"A111"); param.rgvarg[2].vt = VT_BSTR; param.rgvarg[2].bstrVal = SysAllocString(L"A222"); UserDispparams(&param); SysFreeString(param.rgvarg[0].bstrVal); SysFreeString(param.rgvarg[1].bstrVal); SysFreeString(param.rgvarg[2].bstrVal); delete [] param.rgvarg; CloseDialog(wID); return 0;}// ... ...HRESULT CMainDlg::UserDispparams(DISPPARAMS* pDispParams){ if (!pDispParams) return E_INVALIDARG; if (3 != pDispParams->cArgs) return E_INVALIDARG; wstring strMsg; strMsg = strMsg + pDispParams->rgvarg[0].bstrVal + L", "; strMsg = strMsg + pDispParams->rgvarg[1].bstrVal + L", "; strMsg = strMsg + pDispParams->rgvarg[2].bstrVal + L"."; MessageBox(strMsg.c_str(), L"UserDispparams", 0x20); return S_OK;}2> DISPPARAMS配合BSTR使用,在调用的函数中释放释放内存LRESULT CMainDlg::OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/){ // TODO: Add validation code DISPPARAMS param; param.cArgs = 3; param.cNamedArgs = 0; param.rgdispidNamedArgs = NULL; param.rgvarg = new VARIANTARG[3]; param.rgvarg[0].vt = VT_BSTR; param.rgvarg[0].bstrVal = CComBSTR(L"A000").Detach(); param.rgvarg[1].vt = VT_BSTR; param.rgvarg[1].bstrVal = CComBSTR(L"A111").Detach(); param.rgvarg[2].vt = VT_BSTR; param.rgvarg[2].bstrVal = CComBSTR(L"A222").Detach(); UserDispparams(&param); delete [] param.rgvarg; CloseDialog(wID); return 0;}// ... ...HRESULT CMainDlg::UserDispparams(DISPPARAMS* pDispParams){ if (!pDispParams) return E_INVALIDARG; if (3 != pDispParams->cArgs) return E_INVALIDARG; wstring strMsg; CComBSTR bstr0, bstr1, bstr2; bstr0.Attach(pDispParams->rgvarg[0].bstrVal); bstr1.Attach(pDispParams->rgvarg[1].bstrVal); bstr2.Attach(pDispParams->rgvarg[2].bstrVal); strMsg += bstr0; strMsg += L", "; strMsg += bstr1; strMsg += L", "; strMsg += bstr2; strMsg += L"."; MessageBox(strMsg.c_str(), L"UserDispparams", 0x20); return S_OK;} 3> DISPPARAMS配合SAFEARRAY的使用,利用CComSafeArray来管理内存LRESULT CMainDlg::OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/){ // TODO: Add validation code DISPPARAMS param; param.cArgs = 4; param.cNamedArgs = 0; param.rgdispidNamedArgs = NULL; param.rgvarg = new VARIANTARG[4]; param.rgvarg[0].vt = VT_BSTR; param.rgvarg[0].bstrVal = CComBSTR(L"A000").Detach(); param.rgvarg[1].vt = VT_BSTR; param.rgvarg[1].bstrVal = CComBSTR(L"A111").Detach(); param.rgvarg[2].vt = VT_BSTR; param.rgvarg[2].bstrVal = CComBSTR(L"A222").Detach(); CComSafeArray<BSTR> sa; sa.Add(CComBSTR(L"B000").Detach()); sa.Add(CComBSTR(L"B111").Detach()); sa.Add(CComBSTR(L"B222").Detach()); param.rgvarg[3].vt = VT_ARRAY; param.rgvarg[3].parray = sa.Detach(); UserDispparams(&param); delete [] param.rgvarg; _CrtDumpMemoryLeaks(); CloseDialog(wID); return 0;}HRESULT CMainDlg::UserDispparams(DISPPARAMS* pDispParams){ if (!pDispParams) return E_INVALIDARG; if (4 != pDispParams->cArgs) return E_INVALIDARG; wstring strMsg; CComBSTR bstrA0, bstrA1, bstrA2; CComBSTR bstrB0, bstrB1, bstrB2; CComSafeArray<BSTR> sa; bstrA0.Attach(pDispParams->rgvarg[0].bstrVal); bstrA1.Attach(pDispParams->rgvarg[1].bstrVal); bstrA2.Attach(pDispParams->rgvarg[2].bstrVal); sa.Attach(pDispParams->rgvarg[3].parray); bstrB0.Attach(sa.GetAt(0)); bstrB1.Attach(sa.GetAt(1)); bstrB2.Attach(sa.GetAt(2)); strMsg += bstrA0; strMsg += L", "; strMsg += bstrA1; strMsg += L", "; strMsg += bstrA2; strMsg += L"."; strMsg += bstrB0; strMsg += L", "; strMsg += bstrB1; strMsg += L", "; strMsg += bstrB2; strMsg += L"."; MessageBox(strMsg.c_str(), L"UserDispparams", 0x20); return S_OK;}--END--

Megalayer(159元 )年付CN2优化带宽VPS

Megalayer 商家我们还算是比较熟悉的,商家主要业务方向是CN2优化带宽、国际BGP和全向带宽的独立服务器和站群服务器,且后来也有增加云服务器(VPS主机)业务。这次中秋节促销活动期间,有发布促销活动,这次活动力度认为还是比较大的,有提供香港、美国、菲律宾的年付VPS主机,CN2优化方案线路的低至年付159元。这次活动截止到10月30日,如果我们有需要的话可以选择。第一、特价限量年付VPS主...

极光KVM美国美国洛杉矶元/极光kvmCN7月促销,美国CN2 GIA大带宽vps,洛杉矶联通CUVIP,14元/月起

极光KVM怎么样?极光KVM本月主打产品:美西CN2双向,1H1G100M,189/年!在美西CN2资源“一兆难求”的大环境下,CN2+大带宽 是很多用户的福音,也是商家实力的象征。目前,极光KVM在7月份的促销,7月促销,美国CN2 GIA大带宽vps,洛杉矶联通cuvip,14元/月起;香港CN2+BGP仅19元/月起,这次补货,机会,不要错过了。点击进入:极光KVM官方网站地址极光KVM七月...

BuyVM迈阿密KVM上线,AMD Ryzen 3900X+NVMe硬盘$2/月起

BuyVM在昨天宣布上线了第四个数据中心产品:迈阿密,基于KVM架构的VPS主机,采用AMD Ryzen 3900X CPU,DDR4内存,NVMe硬盘,1Gbps带宽,不限制流量方式,最低$2/月起,支持Linux或者Windows操作系统。这是一家成立于2010年的国外主机商,提供基于KVM架构的VPS产品,数据中心除了新上的迈阿密外还包括美国拉斯维加斯、新泽西和卢森堡等,主机均为1Gbps带...

colesafearray为你推荐
stackoverflowstack overflow怎么办soapui下载测试管理工具的soapUI开源测试工具郭凡生慧聪网公司怎么样bindserviceservice在手机程序中起什么作用调度系统生产调度系统layoutsubviews如何设置plus.nativeui.toast的样式cf加速器玩CF需要用加速器吗?图片存储如何将图片保存下来水表读数家用水表怎么读数screencapture求一款这样的截图软件
宿迁服务器租用 vps论坛 域名服务器是什么 域名主机管理系统 备案域名出售 sugarhosts cloudstack 便宜建站 wdcp 服务器cpu性能排行 镇江联通宽带 租空间 php空间申请 腾讯云分析 申请个人网站 服务器维护方案 上海联通宽带测速 闪讯官网 web应用服务器 免费asp空间 更多