如何在运行时检索#pragma注释数据?

时间:2012-06-19 19:29:08

标签: c++ visual-studio-2008 visual-c++ comments pragma

今晚我在MSDN上看到了一个关于#pragma选项的部分。具体来说,#pragma comment定义。

是否可以在运行时将该信息拉回来(例如,识别哪些机器生成了某些源代码)?如果是这样,怎么样?

例如,如果我要添加以下#pragma,我怎么能检索编译日期:

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

2 个答案:

答案 0 :(得分:4)

字符串“Compiled on”...实际上是二进制文件,但它不能直接访问。您需要做的是实际扫描可执行映像以找到该字符串。这会带来一系列问题(例如,你如何在大海捞针中找到代码中的字符串)没有一些“标记”来告诉你“啊哈!这就是它!”

为什么不做这样的事情让你的生活更轻松?

static const char *sCompileInfo = "Compiled on " __DATE__ " at " __TIME__

答案 1 :(得分:2)

根据您引用的MSDN页面,仅当评论类型#pragma comment时,exestr的内容才会在链接二进制文件中结束。您的示例属于user类型,文档非常清楚地表明它不会被链接。此外,甚至不再处理类型exestr(再次,文档称之为)。


对于存储在二进制文件中的注释,可以在以后检索而不执行程序,请尝试使用rc.exe将VERSIONINFO资源嵌入到可执行文件中,并使用GetFileVersionInfoEx函数读取它。 STRINGTABLE资源类型也可能有效。