C ++,OLEDB运行查询返回两列:int和varchar(50)。

所以我想放进去

struct OutputData
{
    int      intID;
    wchar_t* lpszName;
} outputData;


所以,我绑定

    m_oleDBUtils.CreateDBBindings(true, &pRowsetBindings[0], 1,
        offsetof(OutputData, intID), 4, DBTYPE_I4, 0,
        DBPARAMIO_NOTPARAM);
    m_oleDBUtils.CreateDBBindings(false, &pRowsetBindings[1], 2,
        offsetof(OutputData, lpszName), 50, DBTYPE_WSTR | DBTYPE_BYREF, 0,
        DBPARAMIO_NOTPARAM);


等等

我为Win32构建。在Windows 7 x64(运行32位DLL!)下,它可以工作。在Windows XP x86下,我在前两个字符中得到了一致的垃圾(字符串的其余部分都很好)。所以代替

One
Two
Three


我懂了

XXe
XXo
XXree


同样,所有记录的垃圾值都相同。我以为是对齐的,但是/ Zp2,/ Zp4,/ Zp8和/ Zp16都显示相同的行为。

有什么想法吗?

最佳答案

切换到客户端拥有的内存,并/ Zp1对其进行修复。

07-24 21:37