如何检测是否手动定义了DWORD?

时间:2015-11-12 16:23:40

标签: c++

我有使用public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { ThreadLocalMap.Entry e = map.getEntry(this); if (e != null) { @SuppressWarnings("unchecked") T result = (T)e.value; return result; } } return setInitialValue(); } 的C ++项目。我的问题是我不知道如何检查DWORD是否为标准Windows DWORD类型 - 或者用户已将其手动定义为其他内容 - 例如DWORD

我该怎么检查?

问题出在目标机器上我有兴趣检查它我无法运行Visual Studio。我只能运行一些.exe文件。

在我的机器上,当我使用“转到定义”时,它显示为int。 如何解决这个问题呢?并检查这个DWORD引用的目标机器上的哪种类型?

更新:在某些机器上编译项目时,似乎重要的是定义了哪种类型的DWORD - 我无法访问该机器,我只有项目源,这可能没有改变。

2 个答案:

答案 0 :(得分:3)

#define DWORD unsigned longweather.0001_initial编译器在创建二进制可执行文件时检查的内容。 在运行它的每台机器上,此二进制文件都是相同的。如果编译器在必须为DWORD保留空间时决定需要分配4,8或100个字节,它将在它运行的每台PC上分配相同数量的字节。

答案 1 :(得分:3)

这个问题起初似乎很愚蠢,但它有一些有趣的代码。 许多开发人员从托管世界进入本地和类似的东西,这对于不同的处理器/操作系统和#34;乍一看并不清楚。

因此,如果您要发送可执行文件,那么这并不重要。在编译代码之后,代码转换为不可变的机器语言,DWORD保持在编译时定义。如果它是unsigned long,它就会在每台可以运行可执行文件的机器上保持不变。

但如果我们将图书馆送出来会怎样?突然事情重要!在这种情况下(不属于你)你可以使用std::is_same

static_assert(std::is_same<DWORD,unsigned long>::value,"DWORD is not unsigned long, fail to compile");

修改
添加我在项目源代码中编写的代码行并尝试编译它。如果它编译 - 它可能(只是可能)意味着没有一种类型 - 将其定义为其他人。