C++で10年以上プログラムされていないのに、従来のC++ Win32 DLLに適切なエラーレポートを追加しようとしています。レガシーC++ Win32 DLLでヌル終了文字列 - より良い方法がありますか?
これは、バッファオーバーランやセキュリティ問題の可能性はもちろん、C/C++でNULL終了文字列を処理するという非常に辛いことを思い出させるものです。
MFC CStringやSTLライブラリなど、より高度な文字列ライブラリを使用することを検討しています。
編集
DLLは、当社のソフトウェアの両方の古いバージョンで使用されている - C++で書かれました。新しいバージョン - C#で書かれています。
コンパイラはVS2008です。
エラーメッセージをDLLクライアントに戻すのが大きなアーキテクチャ上の変更になるため、最初のパスでは標準Windowsイベントログにログを記録しています(現在のアーキテクチャはひどく、複数の障害モードが単一のコールスタックをバックアップするために渡されるブール型の合格/不合格の戻り値。これは問題診断が悪夢となることは言うまでもない)。しかし、後でこれを改善したいと思うでしょう。これはDLLであるので
文字列ライブラリは
に関する質問、これはさらに良いアイデアですか?
DLLについて特別な考慮事項はありますか?
私は注意する必要がありますか?
この目的のために1つのライブラリが他のライブラリよりも優れていますか?私が使用する必要があり、私は、文字列関数の集合nullで終了、とこだわっている場合
null文字列は
に関する質問しますか? MSのヘルプドキュメントは、古いC関数(strcatなど)の使用を妨げています。しかし、現在利用可能な他の多くのオプションがあるようです(例:_tcscat、_mbscat、wcscatなど)。どちらを使うべきなのですか?なぜですか?
どのバージョンのVC++コンパイラを使用していますか? @Remyが指摘しているように、エラーレポートがどのようにどこで消費されたかは、ここで最も重要な問題です。 log4cppのような既存のインフラストラクチャを検討しましたか? –
@SteveTownsend - 私の編集を参照してください –
私はlog4cppを見ていきます。 Windowsイベントログアペンダーが組み込まれており、後で簡単に変換(または複数のアペンダーを使用)することができます。これは、既存のコードでchar *をどのように扱うかを決定するよりも、コスト的に重要な決定です。クライアントアプリケーションがログデータを直接消費する必要があるときに、C++/C#クライアント間で関連するマーシャリングの問題を扱うことができます。今のところ、問題のデバッグ情報をすばやく追加することが優先事項です。 –