Символ мусора из запроса под 32-битной ОС, хорошо в 64-битной - PullRequest
1 голос
/ 11 октября 2011

C ++, OLEDB, выполняется запрос, который возвращает 2 столбца: 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);

Etc. и т.д.

Я строю для Win32. Под Windows 7 x64 (работает 32-битная DLL!) Это работает. В Windows XP x86 я получаю постоянный мусор в первых двух символах (с остальной строкой все в порядке). Так что вместо

One
Two
Three

Понятно

XXe
XXo
XXree

Опять же, значение мусора одинаково для всех записей. Я думал, что это выравнивание, но / Zp2, / Zp4, / Zp8 и / Zp16 показывают одинаковое поведение.

Есть мысли?

1 Ответ

0 голосов
/ 11 октября 2011

Переключитесь на принадлежащую клиенту память, и / Zp1 исправил это.

...