2

SQLExecDirectODBC を使用してデータベースに接続するための呼び出しに渡されるクエリ文字列を動的に作成する C++ プログラムがあります。ある関数から別の関数に変数を渡すのに問題があるので、何か基本的なものが欠けているに違いないと思いますか?

ConstructQuery関数 ( type を返すSQLWCHAR *) には、次のものがあります。

std::wstring test = L"test string"; //This test string will actually be several concatenated strings
SQLWCHAR *statement = (SQLWCHAR *)test.c_str();
std::wcout << statement;
return statement;

これにより、ステートメント変数が期待どおりに出力されます。しかし、次のように変数をメイン関数に渡すと:

SQLStatement = ConstructQuery(SQLStatement);
std::wcout << SQLStatement;

出力がありません。

もし、代わりにstatement = (SQLWCHAR *)test.c_str();

私は使用します:statement = L"test string";

変数は問題なく通過しますが、関数の前の部分で「テスト文字列」クエリを動的に作成できません。

について多くを知るのに苦労しましたSQLWCHAR。間違って変換std::wstringしている可能性があると思いますか?SQLWCHAR *別のオプションは、関数を書き直して、すべてがwstringそのSQLWCHAR *ように連結されるようにすることです-しかし、それが可能かどうかはわかりませんし、それが好ましいとは思いませんか?

4

1 に答える 1

2

関数 ConstructQuery の最後でスコープ外になるローカル変数へのポインターを返しています。std::wstring値を返し、そこから作業するのが最も簡単かもしれません。

于 2012-06-30T17:10:57.367 に答える