C++ 32位操作系统下查询中的垃圾字符,在64位操作系统中可以使用
C++,OLEDB,运行返回两列的查询:int和varchar50 所以我想把它放进去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
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