看流星社区

 找回密码
 注册账号
查看: 1848|回复: 0

将byte数组的内容转换成BSTR类型,反之。

[复制链接]

该用户从未签到

发表于 2015-3-27 11:25:39 | 显示全部楼层 |阅读模式
问题描述:
之前我们有个接口类似int WINAPI ReadBiosVersion(BYTE *bios, ULONG size, char *version);这个接口是包装在dll中,是操作底层bios的。提供接口的人,提供了32bit和64bit两套dll.而我们的应用程序是32bit的,需要在64bit OS上运行,就需要调用64bit.所以我们的方案是上篇文章介绍的使用进程外的COM来解决。但问题来了,我在COM中提供了一个接口来封装这个接口,例如int WINAPI ReadBiosVersion(BSTR bios, ULONG size, BSTR* ver);
这时,就面临了将byte数组的内容转换成BSTR类型,以及反过来转换问题。
下面是网友提供的方案:
网友回复:方案1:
_bstr_t str = (char*)byteArray;
BSTR bstr = str.GetBSTR();

方案2:
CComVariant var = (char*)byteArray;   
BSTR bstr = var.bstrVal;  

方案3:
USES_CONVERSION;   
BSTR bstr = A2BSTR((char*)byteArray);   
我放入我的工程中发现会出现字符串截断问题。如果是byte数组里放的是普通的字符串,网友的方案应该没问题。但是巧合我的这个byte数组里有空字符,这样就带来了我要写这个主题的动力。
我的方案是:
BSTR bstr = SysAllocStringLen(NULL, dwSize/2);  
memcpy(bstr, pData, dwSize);  

反之,BSTR类型转换成byte数组的方式是
LPBYTE lp = new BYTE[size];  
memcpy(lp, bios, size);
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-25 05:28

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表