MFC Acitivex控件怎么设置BYTE*类型的属性,在属性列表里面没有对应的属性
你是 malloc 了一块内存,想要传递给 COM 组件吗?如果是的话,这是行不通的,与 COM 交互涉及到数据封送,所以不能这样做。正确的做法是使用定长的 BSTR 或者用 SAFEARRAY 结构封送数据。
可是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类型。读取可以 ,设置就报错。求指教
@大芝麻: BSTR 是宽字符,但不表示它不能用来存储 BYTE 数据啊!说到底,BSTR 不就还是 byte 数组吗?只是我们使用时将它认为是字符串。BMP 可以转换成 BASE64 字符串,然后拷贝到 BSTR * 中,或者干脆就直接拷贝到 BSTR * 中,然后读取时记住按照 byte 数组来读取就行了。
设置不了 UINT 类型是什么意思?抱什么错误?
@Launcher:不好意思前端时间事太多了就一直没来结贴,考虑到时间问题后来直接做成动态库,传设备上下文来绘图了