2

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

是否可以在运行时将这些信息提取出来(例如,确定在哪台机器上生成了某些源代码)?如果是这样,怎么做?

例如,如果要添加以下内容,如何检索编译日期#pragma

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

2 回答 2

5

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

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

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

根据您引用的 MSDN 页面,#pragma comment只有当注释类型exestr. 您的示例是 type user,并且文档非常清楚地表明它不会被链接。此外,甚至类型exestr不再被处理(同样,文档指出了这一点)。


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

于 2012-06-19T19:49:31.047 回答