2011-08-25 114 views
1

编译完程序后,我必须使用头文件。由于客户请求,此头文件从服务器下载。在头文件中有3个数组和1个int,我希望在执行过程中读取它们。如何在执行过程中使用.h文件而不用C++编译它?

我的第一个解决方案是编写一个解析器。头文件总是有相同的模式,所以我可以写4行来读取数组和int。

有没有其他解决方案? ho知道,也许是一个动态的include和一个预编译的头文件。


这是一个完整的解释:

我正在开发使用高通公司AR SDK原生Android应用程序。

一种技术使用自己的3D模型,使用该perl脚本:http://heikobehrens.net/2009/08/27/obj2opengl/。基本上你需要2个文件:包含顶点,法线和纹理坐标的头部和纹理。上面的脚本可以从.obj文件中产生这个头文件。

好了,现在你准备在本地C/C++用来渲染模型这两个文件。您可以编译这个头并将其包含在您的应用程序的任何位置。但是,例如,当用户按下按钮时,我的应用程序需要下载此标题和纹理。纹理很容易阅读,但我也需要在执行时读取标题。因为我不是C/C++专家,所以我问这里是否有机会在执行时连接头文件。

但现在并不重要,怎么一回事,因为我所著解析器这样我就可以在执行时使用的顶点,纹理COORDS和法线。

+0

'我必须在编译程序之前使用头文件'这就是通常使用头文件的方式。在单个源文件中包含头文件并使用其中定义的任何东西有什么问题? – Praetorian

+4

听起来像你正在使用头文件,如配置文件。 –

回答

8

C++(通常)一个静态编译语言。你编译它,并获得一些可执行代码,你可以运行它。编辑之前和之后的两个阶段与彼此没有任何关系。在编译时,您只处理C++源代码,只有

而在运行时,您将处理从所有源代码生成的单个编译程序。

一般没有办法一旦被编译源代码以“添加”到一个程序。

(我在这里简化了一下,我希望nitpickers见谅)

你需要做的,而不是什么治疗是“头”的数据,而不是代码。

它是一个包含三个数组和一个int的数据文件。您需要编写程序来打开该文件,阅读其内容,解析它并执行必要的操作。

为了做到这一点,你需要寻找到文件I/O读取的文件,字符串处理,以处理其内容,然后一些逻辑来创建变量来保存在数据文件中指定的数据。

但是,你不能只是“插入”新的代码。

+3

+1这是答案应该如何处理。如果只有所有的SO用户都耐心记住这个任务就是帮助程序员。 – codenheim

3

不,你必须编写一个解析器。有些语言在运行时可以包含新代码,但C++不是其中之一。

+0

您可能会提到,如果已经编译了新的代码(动态链接),那么可以采用新代码,但这些方法与OP的问题无关。 –

3

为了补充jalf的回答(现在问题已经重新打开......谢谢)如果你的目标是使用头文件中的常量值作为配置文件,那么实现一些简单的正则表达式解析器就足够了。

只要确保你需要用常量修改的变量实际上是变量,而不是常量本身,或者你不能在运行时修改它们。

即。如果你想从config.h中读取MAX_FILES,不要使用默认的#define MAX_FILES 255或const int MAX_FILES = 255进行编译。使用“int maxFiles = 255”,然后在运行时用你的配置值覆盖它。

如果我误解了,道歉,希望这有助于。

-1

听起来就像你试图使用配置文件。你有控制服务器上文件的格式吗?如果是这样,这里最简单的方法是用像xml这样的标准格式编写你的配置文件,然后使用类似rapidXML的库来解析配置文件,当你收到它们时

关于使用标准格式的好处是如果您稍后决定更改配置文件格式,请添加到它等等。这将是对您的代码进行相对简单的更新以解析更新的文件。通常比重新编写自定义分析器的工作量少。

如果您无法控制服务器文件的外观,并且它们不是像JSON,XML,YAML等标准格式,则必须编写您自己的自定义分析器。听起来这是一个相对简单的文件,所以这不应该太难。

+0

这听起来很清楚,格式是一个C++头文件,他从外部源接收。 –

+0

在这种情况下,他应该根据我的答案的第三部分编写自己的自定义分析器。我只是指出,如果事实上他对这些数据的存储方式有一些说法,那么使用标准化的数据格式和解析器可能是一个更好的主意。通过网络发送C++头文件并不是特别常见。这听起来像是他试图根据服务器的文本文件初始化他的程序中的一些值,并且他对如何在代码中包含这些值感到困惑(因此询问如何将头添加到他的编译的可执行文件中)。 – wallacer

相关问题