我想基于几个源文件创建一个共享库,每个源文件都有一个头文件。现在,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();
}
}
中的函数。但似乎我还必须随身携带所有这些其他头文件,这似乎不对。通常当我获得一个库时,它只有一个标题...
答案 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
中包含此新标题。