| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 573 人关注过本帖
标题:如何用C++的SAFEARRAY到VB
只看楼主 加入收藏
HeyjohnLin
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-1-5
收藏
 问题点数:0 回复次数:0 
如何用C++的SAFEARRAY到VB
小弟正在用C++编程,在编程的时候,我导出了一些VB中的函数,其中有一个函数是这样的:
程序代码:
CString SelectElement2(SAFEARRAY * iFilterType, BSTR * iMessage, BOOL iObjectSelectionBeforeCommandUsePossibility)
    {
        CString result;
        static BYTE parms[] = VTS_NONE VTS_PBSTR VTS_BOOL ;
        InvokeHelper(0x60050013, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, iFilterType, iMessage, iObjectSelectionBeforeCommandUsePossibility);
        return result;
    }

在这里,我需要用SAFEARRAY *传递一个"Vertex"的string到该函数使用。
目前使用的函数是这样的:
程序代码:
//用VARIANT先封装BSTR,再用微软的方法进行转换
    //首先用SAFEARRAY包装一层
    SAFEARRAYBOUND bound[1];
    bound[0].lLbound=0;
    bound[0].cElements=1;
    SAFEARRAY *psa =SafeArrayCreate(VT_BSTR,1,bound);
    BSTR bFilter;
    bFilter =SysAllocString(L"Vertex");
    LONG i=0;
    SafeArrayPutElement(psa,(long*)&i,bFilter);


    VARIANT FAR VBpStrArray;
    VariantInit(&VBpStrArray);
    VBpStrArray.vt=VT_ARRAY|VT_BSTR;

    VBpStrArray.parray = psa;
    
    SAFEARRAY FAR *pStrArrTemp = NULL;
    long LBound;
    long UBound;
    BSTR HUGEP *pbstr;
    CString strtemp; 
    USES_CONVERSION;

    pStrArrTemp = V_ARRAY(&VBpStrArray);
    SafeArrayGetLBound(pStrArrTemp,1,&LBound);
    SafeArrayGetUBound(pStrArrTemp,1,&UBound);
    SafeArrayAccessData(pStrArrTemp, (void HUGEP* FAR*)&pbstr); 


    for (int i=0;i<(UBound-LBound);i++)
        strtemp+=LPWSTR(pbstr);

    cstrStatus = selSelection.SelectElement2(pStrArrTemp,NULL,FALSE);

运行到这里的时候,显示 类型不匹配。添加监视窗口,发现SAFEARRAY里面已经存了“Vertex"这个string.

实在找不到解决办法了,希望能得到大家的指点.

[ 本帖最后由 HeyjohnLin 于 2015-6-16 21:18 编辑 ]
搜索更多相关主题的帖子: result 如何 
2015-06-16 21:14
快速回复:如何用C++的SAFEARRAY到VB
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015996 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved