VC++のセキュリティとかいろんなところででつまづく

 昨年、C#でWindowsプログラミングをはじめ、いろいろやっているうちになぜかC++とかまで手を出すはめに。UWPじゃ制限がありできない、C#だと参考になるものがない、ということで。SDKとかサンプルプログラムを見ながら見よう見まねで。基本がわからないので、ちょっと手直ししてみるだけでも時間がかかる。その例のひとつ。
 セキュリティ的にそれは使うなとかエラーが出る。
 sprintf( dumpBuffer+index, “%02x”, *data );
  は
 sprintf_s(dumpBuffer + index, 100, “%02x”, *data);
 みたいな感じに。
 strcat(dumpBuffer, “:”);
  は
 strcat_s( dumpBuffer, _countof(dumpBuffer), “:” );
 っていう感じだそうだ。
 参考にしたのはここ。
 ぷろぐらむめも : fopen_sとかsscanf_sとかの”_s”関数書き換え例まとめ


(追記)
 scanfを使う。セキュリティ的に問題があるという。scanf_sを使えだそうだ。パラメーターには変更なし。そのままでいけた。
 DLLを作成するプロジェクトを含むソリューションをいじる。デバッグしようとすると、「xxx.dllを開始できません。」「xxx.dllは有効なWin32アプリケーションではありません。」と言われる。
 ビルドして出力したEXEファイルは正常に意図したとおりに動作するのだけど。むむう。で、調べた。
 これはスタートアッププロジェクトの設定で解決。DLLのプロジェクトのほうを起動しようとしていた模様。ソリューションエクスプローラーで選んだほうが起動するものだとばかり思っていた。
 設定方法は「プロジェクト」メニューの「スタートアッププロジェクトに設定」でいける。ソリューションのプロパティにもあった。
 参考にしたのはこのへん。
 Windows 8.1上でVisual Studio 2015を使用してデバッグビルドしても、デバッグ開始できません。
 方法 : スタートアップ プロジェクトを設定する
 今後もこんな感じでメモしていこうかと思う。

コメント