【发布时间】:2012-05-11 08:39:38
【问题描述】:
我正在尝试编写一个 C# 库来操作我的 C/C++ 头文件。我希望能够读取和解析头文件并在 C# 中操作函数原型和数据结构。由于#ifdefs 和类似的东西引起的所有代码分支,我试图避免编写 C 解析器。
我尝试过使用 EnvDTE,但找不到任何像样的文档。 任何想法我该怎么做?
编辑 - 谢谢你的回答......这里有一些关于我的项目的更多细节:我正在使用调试 API 为 Windows 编写一个类似 ptrace 的工具,这使我能够跟踪我已经编译的二进制文件并查看正在调用哪些 Windows API .我还想看看每次调用中给出了哪些参数以及给出了哪些返回值,所以我需要知道 API 的定义。我也想知道我自己的库的定义(因此,头解析方法)。我想到了3个解决方案: * 解析头文件 * 解析 PDB 文件(我使用 DIA SDK 编写了一个原型,但不幸的是,符号 PDB 仅包含有关 API 的一般信息,而不是带有参数和返回值的真实原型) * 爬取 MSDN 在线图书馆(自动或手动)
有没有更好的方法在 c# 中在运行时获取 windows API 和我的库的名称和类型?
【问题讨论】:
-
不要,只是不要。不管你这样做的原因是什么:你做错了。除了也许,也许如果你正在编写一个词法分析器或解析器生成器,但你不必问这种问题
-
我想不出任何其他方法从我的代码库中获取原型(我的一些测试环境/模糊测试需要它)。
-
那么您应该阅读有关如何测试软件的内容。提示:这不是通过解析标题和输入随机数据。您可能希望创建仅使用标头并将随机数据输入到实现中的测试类(使用程序的语言,即 C++)。
-
另外,你犯了经典的“XY 问题”错误:meta.stackexchange.com/questions/66377/what-is-the-xy-problem
-
你一直在解释我做错了什么,但没有给出真正的答案......我有我选择这种方法的理由,你的答案不是很有帮助..
标签: c# c++ parsing compiler-construction compilation