如何使用一个头文件发送共享库?

时间:2015-07-14 16:56:43

标签: c++ shared-libraries

我想基于几个源文件创建一个共享库,每个源文件都有一个头文件。现在,header1.hpp包含行#include "header2.hpp",而行#include "header3.hpp"又包含行#include "header4.hpp",后者又包含行header1.hpp,依此类推......

但我想用一个头文件发送我的库。我的库需要公开的唯一函数是 private void frmReportViewer_Load(object sender, EventArgs e) { using (ReportDocument report = new ReportDocument()) { string a = (new System.Uri(Assembly.GetEntryAssembly().CodeBase)).AbsolutePath; string b = Path.GetDirectoryName(a); string fullPath = Path.Combine(b, "..\\..\\Reports\\DailyAttendance\\rpt_DailyAttendance.rpt"); DataSet ds_attendance = new DataSet(); ds_attendance = obj_dalTimeAttendance.getAttendanceReport(); ds_attendance.Tables[0].TableName = "RPT_TIMESHEET"; report.Load(fullPath); report.SetDataSource(ds_attendance); report.SetDatabaseLogon("cil_hr", "asd@123"); rptViewer.ReportSource = report; rptViewer.DisplayToolbar = true; rptViewer.RefreshReport(); } } 中的函数。但似乎我还必须随身携带所有这些其他头文件,这似乎不对。通常当我获得一个库时,它只有一个标题...

2 个答案:

答案 0 :(得分:0)

您可以使用C预处理器将所有包含组合成一个包含:

1)创建一个包含所需头文件的dummy.c文件(只是顶层文件)。如果您有一个直接或不包含所有其他的,可能只有一个。

2)cc -E dummy.c> single_header.h

3)您需要在生成的头文件中过滤掉系统包含的内容。来自不同标题的内容由以“#”符号开头的行表示。你可以很容易地编写一个perl或awk或peek-your-favorite-small-language程序来删除你不想要的东西,通常是在像

这样的语句之间
# xxx "/usr/include/something.h" yyy zzzz

以#

开头的下一行

答案 1 :(得分:0)

如果要公开所有函数的子集,可以将相应的声明移动到新的标题headerexp.hpp,并在header1.hpp中包含此新标题。