字节数组为Variant

时间:2013-07-13 10:23:15

标签: c++ com variant

我有一个包含例如

的字节数组

byte mac[6] = {0x00, 0x8a, 0x0C, 0x98, 0x11, 0x15}

使用此语句将其插入数据库时​​

m_pWiFiRecords->Fields->Item[varColumnIndex]->Value = _variant_t((char*)(pRecord->bss_id));

它将它保存为空数组,因为第一个元素= 0x00,当它作为字节数组投射时,它将其保存为-1。

你能帮我解决问题吗?

1 个答案:

答案 0 :(得分:5)

以下是将二进制数据导入_variant_t的方法。如果数据库设置为处理二进制数据,它应该适合您。

请注意,_variant_t会在SAFEARRAY超出范围时对其进行深度破坏,因此您无需担心执行SafeArrayDestroy

_variant_t var;
var.vt = VT_ARRAY | VT_UI1;

SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements = 6;
rgsabound[0].lLbound = 0;

var.parray = SafeArrayCreate(VT_UI1,1,rgsabound);

void * pArrayData = NULL;    
SafeArrayAccessData(var.parray,&pArrayData);
memcpy(pArrayData, mac, 6); 
SafeArrayUnaccessData(var.parray);

m_pWiFiRecords->Fields->Item[varColumnIndex]->Value = var;