2

で mysqlcpp ライブラリを使用すると、CPP アプリケーションで奇妙な動作が発生しsql::SQLStringます。const charまたはから ne SQLString を作成するstd::stringと、コンストラクターがコンテンツの形式を誤っているようです。

ここに私のコード:

sql::SQLString hostname("jp-sys3");

//sql::SQLString hostname = sql::SQLString(settings->database().hostname());

sql::SQLString username = sql::SQLString(settings->database().username());

sql::SQLString password = sql::SQLString(settings->database().password());

このリテラルまたは設定クラス (std::string) から SQLString の変数を初期化すると、(行でsql::SQLString username) ブレーク ポイントを設定すると、ホスト名の内容がまったく異なるものになることがわかります。

realStr="\b=8";

http://s24.postimg.org/w1ecbfbo5/breakpoint.png
しかし、これは実行ごとに異なります。

最初はビルド前のライブラリ (1.1.3、x32) を使用し、後でソース (Visual Studio 2012 Update 2) からビルドしました。これにより、同じ動作が発生しました。デバッグ ビルドは char リテラルを正しい方法で扱いますが、リリース ビルドはそうではありません。

ここで何がうまくいかないのか、誰かがヒントを与えることができますか?

デバッグ リンク オプション:

/OUT:"D:\Projects\STGPanel\Debug\STGPanel.exe" /MANIFEST /NXCOMPAT /PDB:"D:\Projects\STGPanel\Debug\STGPanel.pdb" /DYNAMICBASE "SDL.lib" "SDLmain.lib" "SDL_ttf.lib" "mysqlcppconn.lib" "xerces-c_3.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /INCREMENTAL:NO /PGD:"D:\Projects\STGPanel\Debug\ STGPanel.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\STGPanel.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1 

リリース リンク オプション:

/OUT:"D:\Projects\STGPanel\Release\STGPanel.exe" /MANIFEST /LTCG /NXCOMPAT /PDB:"D:\Projects\STGPanel\Release\STGPanel.pdb" /DYNAMICBASE "SDL.lib" "SDLmain. lib" "SDL_ttf.lib" "mysqlcppconn.lib" "xerces-c_3.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" " shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /OPT:REF /SAFESEH /PGD:"D:\Projects\ STGPanel\Release\STGPanel.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Release\STGPanel.exe.intermediate.manifest" /OPT:ICF /ERRORREPORT:プロンプト /NOLOGO /TLBID:1 
4

2 に答える 2

1

最終的に解決策を見つけました。この動作は、mysql からダウンロードしたバイナリが原因でした。私のVisual Studioバージョンで再構築した後、すべてが意図したとおりに機能します。

于 2013-06-12T12:45:56.990 に答える