2

#pragma私は今晩MSDNでオプションについて話しているセクションに出くわしました。具体的には、#pragma comment定義。

実行時にその情報を引き出すことは可能ですか(たとえば、ソースコードが生成されたマシンを特定するため)?もしそうなら、どのように?

たとえば、次のものを追加した場合、コンパイル日を取得するにはどうすればよいですか#pragma

pragma comment( user, "Compiled on " __DATE__ " at " __TIME__ ) 
4

2 に答える 2

5

文字列"Compiledon" ...は実際にはバイナリにありますが、直接アクセスすることはできません。あなたがする必要があるのは、実際に実行可能イメージをスキャンしてその文字列を見つけることです。これにより、「ああ!ここにある!」という「マーカー」がなくても、独自の問題が発生します(つまり、コードである干し草の山から文字列である針をどのように見つけるか)。

あなたの生活を楽にするために、このようなことをしてみませんか?

static const char *sCompileInfo = "Compiled on " __DATE__ " at " __TIME__
于 2012-06-19T19:45:35.163 に答える
3

引用したMSDNページによると、のコンテンツは、コメントタイプが。の#pragma comment場合にのみリンクされたバイナリになります。あなたの例はタイプであり、ドキュメントはそれがリンクされないことを非常に明確に述べています。さらに、タイプでさえ処理されなくなりました(ここでも、ドキュメントでこれが呼び出されています)。exestruserexestr


プログラムを実行せずに後で取得できるバイナリファイルに保存されているコメントについては、rc.exeを使用して実行可能ファイルにVERSIONINFOリソースを埋め込み、関数を使用して読み取ってみてくださいGetFileVersionInfoEx。STRINGTABLEリソースタイプも効果的である可能性があります。

于 2012-06-19T19:49:31.047 に答える