首页 新闻 会员 周边

MFC Acitivex控件怎么设置BYTE*类型的属性

0
悬赏园豆:30 [已解决问题] 解决于 2014-04-23 18:23

MFC Acitivex控件怎么设置BYTE*类型的属性,在属性列表里面没有对应的属性

大芝麻的主页 大芝麻 | 初学一级 | 园豆:4
提问于:2014-04-15 11:23
< >
分享
最佳答案
0

你是 malloc 了一块内存,想要传递给 COM 组件吗?如果是的话,这是行不通的,与 COM 交互涉及到数据封送,所以不能这样做。正确的做法是使用定长的 BSTR 或者用 SAFEARRAY 结构封送数据。

收获园豆:30
Launcher | 高人七级 |园豆:45045 | 2014-04-15 11:31

可是BSTR不是宽字符吗。

是这样的,我在ActiveX控件里面::CreateDIBSection,然后获得灰度图指针,要把这个指针引出来,在C#里面赋值。还有就是设置图像宽度和高度。C#里面获得属性可以,但是设置却报错无法转换类型

VARIANT CShowBoxCtrl::GetImgHeight(void)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    VARIANT vaResult;
    VariantInit(&vaResult);

    // TODO: 在此添加调度处理程序代码
    vaResult.vt=VT_UINT;
    vaResult.uintVal=10;
    return vaResult;
}


void CShowBoxCtrl::SetImgHeight(VARIANT newVal)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    // TODO: 在此添加属性处理程序代码
    newVal.vt=VT_UINT;
    UINT l=newVal.uintVal;
    SetModifiedFlag();
}

先不说图像指针,这个图像高度和宽度都设置不了UINT类型。读取可以 ,设置就报错。求指教

 

大芝麻 | 园豆:4 (初学一级) | 2014-04-15 11:50

@大芝麻: BSTR 是宽字符,但不表示它不能用来存储 BYTE 数据啊!说到底,BSTR 不就还是 byte 数组吗?只是我们使用时将它认为是字符串。BMP 可以转换成 BASE64 字符串,然后拷贝到 BSTR * 中,或者干脆就直接拷贝到 BSTR * 中,然后读取时记住按照 byte 数组来读取就行了。

设置不了 UINT 类型是什么意思?抱什么错误?

 

 

Launcher | 园豆:45045 (高人七级) | 2014-04-15 13:10

@Launcher:不好意思前端时间事太多了就一直没来结贴,考虑到时间问题后来直接做成动态库,传设备上下文来绘图了 

大芝麻 | 园豆:4 (初学一级) | 2014-04-23 18:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册