今晚我在MSDN上看到了一个关于#pragma
选项的部分。具体来说,#pragma comment
定义。
是否可以在运行时将该信息拉回来(例如,识别哪些机器生成了某些源代码)?如果是这样,怎么样?
例如,如果我要添加以下#pragma
,我怎么能检索编译日期:
pragma comment( user, "Compiled on " __DATE__ " at " __TIME__ )
答案 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资源类型也可能有效。