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--

raksmart:年中大促,美国物理机$30/月甩卖;爆款VPS仅月付$1.99;洛杉矶/日本/中国香港多IP站群$177/月

RAKsmart怎么样?RAKsmart发布了2021年中促销,促销时间,7月1日~7月31日!,具体促销优惠整理如下:1)美国西海岸的圣何塞、洛杉矶独立物理服务器低至$30/月(续费不涨价)!2)中国香港大带宽物理机,新品热卖!!!,$269.23 美元/月,3)站群服务器、香港站群、日本站群、美国站群,低至177美元/月,4)美国圣何塞,洛杉矶10G口服务器,不限流量,惊爆价:$999.00,...

HyperVMart:加拿大vps,2核/3G/25G NVMe/G口不限流量/季付$10.97,免费Windows系统

hypervmart怎么样?hypervmart是一家成立了很多年的英国主机商家,上一次分享他家还是在2年前,商家销售虚拟主机、独立服务器和VPS,VPS采用Hyper-V虚拟架构,这一点从他家的域名上也可以看出来。目前商家针对VPS有一个75折的优惠,而且VPS显示的地区为加拿大,但是商家提供的测速地址为荷兰和英国,他家的优势就是给到G口不限流量,硬盘为NVMe固态硬盘,这个配置用来跑跑数据非常...

2021HawkHost老鹰主机黑色星期五虚拟主机低至3.5折 永久4.5折

老鹰主机HawkHost是个人比较喜欢的海外主机商,如果没有记错的话,大约2012年左右的时候算是比较早提供支付宝付款的主机商。当然这个主机商成立时间更早一些的,由于早期提供支付宝付款后,所以受众用户比较青睐,要知道我们早期购买海外主机是比较麻烦的,信用卡和PAYPAL还没有普及,大家可能只有银联和支付宝,很多人选择海外主机还需要代购。虽然如今很多人建站少了,而且大部分人都用云服务器。但是老鹰主机...

colesafearray为你推荐
mindmanager破解版求mindmanager 2019 的注册机bindserviceonserviceconnected什么时候执行arc是什么意思arcsin中arc是什么的缩写? 怎么读? ?radius认证如何写一个C#的Radius认证客户端radius认证PPPoE有认证的功能,RADIUS也有验证功能,两者有区别么??色库石伟伟怎么写啊弹幕播放器看过的剧有一个弹幕出来的是什么播放器相似图片搜索怎么找手机上的一张相似图片?银联商务招聘银联商务的正式工与派遣工有啥区别疫苗之王被称为免疫之王的产品
东莞服务器租用 合租服务器 国内vps 国外vps主机 如何注销域名备案 siteground cpanel 美国便宜货网站 60g硬盘 正版win8.1升级win10 绍兴高防 idc资讯 免费全能主机 100m独享 万网空间购买 新世界服务器 lick 华为云建站 摩尔庄园注册 广州服务器托管 更多