我做的一个activex控件。其中有一个接口类的的一个属性要
得到内部的一个字符串数组,其实就是CStringArray类的一个对象。
或者是
200,300,200,300
100,200,200,200
这种数组,比如上面的数组是两个元素,第一个是
“200,300,200,300”第二个是“100,200,200,200”
我现在就是想把他们(接口类的一个内部变量,属性)得到。当然要通过
属性来得到了。不知道应该怎么得到啊?用什么类型返回啊?
VARIANT吗??还是别的什么啊?比如SAFEARRAY啊??要求得到以后在vb中,比如上面那个例子,可以定义一个数组A
A(0) = “200,300,200,300”
A(1) = “100,200,200,200”
请大家多帮忙,谢谢了。
得到内部的一个字符串数组,其实就是CStringArray类的一个对象。
或者是
200,300,200,300
100,200,200,200
这种数组,比如上面的数组是两个元素,第一个是
“200,300,200,300”第二个是“100,200,200,200”
我现在就是想把他们(接口类的一个内部变量,属性)得到。当然要通过
属性来得到了。不知道应该怎么得到啊?用什么类型返回啊?
VARIANT吗??还是别的什么啊?比如SAFEARRAY啊??要求得到以后在vb中,比如上面那个例子,可以定义一个数组A
A(0) = “200,300,200,300”
A(1) = “100,200,200,200”
请大家多帮忙,谢谢了。
解决方案 »
- char * strcpy(char * destStr, char * sourStr)
- 网络编程与Unicode的问题
- 一个打开bmp图象时遇到的问题
- 国内怎么没有英文版的<<Programming Windows>> Petzold的.像<<Thinking in c++>>.
- 怎么才能修改IE中安全选项中Internet项中的关于ActiveX下载项的值,我翻遍了API也没解决问题
- 谁碰到过这个问题,该怎么解决??(fatal error C1004: unexpected end of file found)
- 让窗口支持拖动的问题
- 怎样使一个基于 CDialog 的应用程序一开始便被隐藏?
- 只能看到最近几天的帖子吗?
- string类型变量的赋值和拼接问题
- (100分)PARENT窗口的SIZE发生改变,时候可以影响其CHILD窗口收到某个消息呢?
- 如何编写ie的自定义协议
VARIANT中的数据类型是SAFEARRAY,SAFEARRAY中的数据为VT_BSTR。
void CXXXPropPage::DoDataExchange(CDataExchange* pDX)
{
//{{AFX_DATA_MAP(CDbGridPropPage)
DDP_Check(pDX, 属性页的控件名, 根控件关联的变量, _T("程序中此属性的名字(他和一个on属性名change关联)") );
DDX_Check(pDX, 属性页的控件名, 根控件关联的变量);
//}}AFX_DATA_MAP
DDP_PostProcessing(pDX);
}
VARIANT
VARIANT中的数据类型是SAFEARRAY,SAFEARRAY中的数据为VT_BSTR。
可是结果不对,总是有runtime error
是不是因为内存分配不是在堆里申请得啊??(pTmpResultArray可以看出一个矩阵,n×4的,所以要动态分配才行)STDMETHODIMP CclsDivideCard::get_pResultArray(VARIANT *pVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here
UINT i = 0;
CString A;
VARIANT var;
BSTR HUGEP *pbstr = NULL;
HRESULT hr;
SAFEARRAY * psa;
SAFEARRAYBOUND rgsabound[1];
if ((gblOKDoneDivide) && (pTmpResultArray.GetC() > 0) && (pTmpResultArray.GetR() > 0))
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = pTmpResultArray.GetR();
psa = SafeArrayCreate(VT_BSTR, 1, rgsabound);
if (psa == NULL)
{
return NOERROR;
}
hr = SafeArrayAccessData(psa, (void HUGEP**)&pbstr);
if (FAILED(hr))
return NOERROR;
for (i = 0; i < psa->rgsabound[0].cElements - 1; i++)
{
A.Empty();
A.Format("%d,\t%d,\t%d,\t%d", (int)pTmpResultArray.GetAt(i + 1, 1),
(int)pTmpResultArray.GetAt(i + 1, 2),
(int)pTmpResultArray.GetAt(i + 1, 3),
(int)pTmpResultArray.GetAt(i + 1, 4));
pbstr[i] = A.AllocSysString();
}
SafeArrayUnaccessData(psa);
pVal->vt = VT_ARRAY | VT_BSTR;
pVal->parray = psa;
// var.vt = VT_ARRAY | VT_BSTR;
// var.parray = psa;
// COleVariant* t = new COleVariant;
// t->Attach(var);
// *pVal = t->Detach();
}
else
{
}
return S_OK;
}