Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 32位操作系统下查询中的垃圾字符,在64位操作系统中可以使用_C++_Sql Server_Visual C++_Oledb - Fatal编程技术网

C++ 32位操作系统下查询中的垃圾字符,在64位操作系统中可以使用

C++ 32位操作系统下查询中的垃圾字符,在64位操作系统中可以使用,c++,sql-server,visual-c++,oledb,C++,Sql Server,Visual C++,Oledb,C++,OLEDB,运行返回两列的查询:int和varchar50 所以我想把它放进去 struct OutputData { int intID; wchar_t* lpszName; } outputData; 所以,我绑定 m_oleDBUtils.CreateDBBindings(true, &pRowsetBindings[0], 1, offsetof(OutputData, intID), 4, DBTYPE

C++,OLEDB,运行返回两列的查询:int和varchar50

所以我想把它放进去

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构建。在运行32位DLL的Windows 7 x64下!,它起作用了。在WindowsXPx86下,我在前两个字符中得到了一致的垃圾,而字符串的其余部分没有问题。所以不是

One
Two
Three
我明白了

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


有什么想法吗?

切换到客户机拥有的内存并/Zp1修复它。

我怀疑该DLL是32位的。@AJG85:您不能将64位DLL加载到32位进程的空间中,反之亦然,因此如果不是,它将崩溃。您也不能将32位DLL加载到64位进程中。但是,你可以把事情搞得一团糟,只是混合和匹配。如果DLL不是32位的,它就根本不会在32位XP上运行。所以我很有信心这个图像实际上是32位的。@AJG85:谁说了64位的进程?OP声明他是为Win32构建的,所以它应该是一个32位的进程,对于加载DLL完全有效。你能详细说明一下你是如何修复它的吗?我有一个类似的问题,但切换/Zp1并没有解决它;如果我记得正确的话,我使用的是Windows API,在XP下从来没有一个对齐,切换到从C++分配。再说一遍,好久不见了,我不会为你打开这只狗的,对不起:-
XXe
XXo
XXree