如何知道特定的预处理器指令是不是在第三方 DLL 中定义?

Posted

技术标签:

【中文标题】如何知道特定的预处理器指令是不是在第三方 DLL 中定义?【英文标题】:How to know whether a particular preprocessor directive is defined in a third party DLL or not?如何知道特定的预处理器指令是否在第三方 DLL 中定义? 【发布时间】:2020-04-08 15:41:35 【问题描述】:

我正在使用来自 DLL 的定义。 DLL 中有多个定义,将根据条件预处理器宏声明选择一个。如何知道DLL中使用了哪个预处理器声明?

【问题讨论】:

您所说的“从 DLL 定义”是什么意思?.. 这很模糊。如果我们谈论 DLL 导出.. 这很容易.. 如果我们谈论 #define X 10 与 #define X 11.. 它变得更加困难。请澄清。 【参考方案1】:

预处理器指令和宏仅在编译时存在。除了可能在调试信息中,已编译的二进制文件(例如 DLL)通常不包含有关预处理器指令或宏的任何信息。

【讨论】:

【参考方案2】:

感谢您的回复。 如果正在使用的DLL的源文件如下:

文件1

#ifdef x 结构 A 诠释一个; 浮动 b; ;

其他

   struct A  
           int a; 
   ;

endif

在用户代码中,结构 A 正在被实例化。有什么方法可以让我们知道正在使用 DLL 中的哪个结构定义? DLL 提供程序没有关于如何构建 DLL 的源代码和其他信息。

【讨论】:

请不要将您的回复作为答案发布。相反,您可以发表评论编辑问题。【参考方案3】:

不确定问题陈述,但如果您想要反编译器,则几乎没有 ILSpy、DotPeek 等选择。

【讨论】:

以上是关于如何知道特定的预处理器指令是不是在第三方 DLL 中定义?的主要内容,如果未能解决你的问题,请参考以下文章

C 预处理器指令是不是每次都重新计算?

Visual Studio 吐出 .lib 而不是 .dll

如何检查我的 C# 应用程序是不是使用来自 nuget 包的正确平台特定 dll?

C# 如何判断DllImport()所引用的dll文件是不是存在 我有两个dll文件名 只有一个文件名在特定的系统中存在

DLL 函数调用的间接跳转

不使用 DLL 时如何在没有依赖 DLL 的情况下运行?