2
SQLGetData()を呼び出してフィールド値を取得しています。これは32ビットアプリケーションとしてはうまく動作しますが、スタックを64ビットとして破棄しています。SQLINTEGER *をSQLLENにキャストできません。*(x64)
奇妙なことは、SQLLENがSQLINTEGERとして#定義されていることです。つまり、それらは同じものです。彼らは、どちらも長いタイプです。
unsigned long Field::asUnsignedLong() const
{
unsigned long result;
SQLINTEGER sizeNeeded = 0;
// Trashes the stack around sizeNeeded...
if(!SQL_SUCCEEDED(SQLGetData(_statement, _columnIndex, SQL_C_ULONG, &result, sizeof(result), &sizeNeeded)))
{
throw std::runtime_error(getError(SQL_HANDLE_STMT, _statement));
}
return result;
}
なぜVisual StudioはSQLLEN *をSQLINTEGER *に変換できないと思うのですか?私が明示的なキャストを使用して強制すると、スタックが壊れてしまうのはなぜですか?
ありがとうございました!
ああ、そうだった。ありがとう! – James