C++ 编译器从存储在 .lib 中的 .db 文件中读取数据
C++ compiler reading data from .db file stored in .lib
我对 C# 有一定的了解。我被要求制作一个 SDK 以及我们的程序,以便客户可以使用我们的功能制作他自己的 UI。在 C# 中,我通过添加一个 DLL 来完成此操作。我不得不使用数据库文件 (.db) 来保存命令,并且成功了。现在我被要求在 C++ 中做同样的事情。我对 C++ 很陌生。但这是我从 MSDN 上读到并做的:
- 我创建了一个库项目。
- 添加数据库作为资源文件、sqlite3 header 文件和库文件(我在命令提示符下输入 lib 命令)。
- 创建了一个包含函数的 header 文件,并将所有函数定义写入 .cpp 文件。
- 构建它并从 lib 命令获取库文件。
到目前为止,还不错。现在,当我尝试使用此库文件和 header 时,我在构建期间遇到了以下错误。
error C2059: syntax error : '<'
error C2018: unknown character '0x7'
error C2018: unknown character '0x60'
error C2018: unknown character '0x7'
error C2018: unknown character '0x2'
error C2018: unknown character '0x1e'
error C2018: unknown character '0x18'
当我记得这些错误与我几天前遇到的相同时,我为此苦苦挣扎了一段时间。我实际上在 SE 中问了这个问题并得到了答案 ()。
所以我推断编译器正在尝试读取保存在库文件中的数据库文件,因此我得到了这些错误。
现在我有三个问题:
- 我说的对吗?编译器是否试图读取存储在 .lib 文件中的 .db 文件?
- 如果可以,请问大家有什么建议吗
- 此外,如果您认为我错了,我将不胜感激任何其他解释。
我正在使用 Visual Express C++ 2010。我使用 Visual Studio 附带的命令提示符来创建 .lib 文件。我创建 .lib 文件的参考是 https://msdn.microsoft.com/en-us/library/ms235627.aspx#BKMK_CreateAppToRefTheLib.
要部署的静态库文件中不能存放数据库文件。因为编译器总是通读库的内容。它表明它在您构建程序时正在读取它。
那么如果你的SDK要下发数据库怎么办?我有两个解决方案:
- 使用您的 .lib 文件和 .h 文件添加数据库文件,然后直接使用 SDK 提供命令词汇表。 (但是我不建议这样做)
- 更改数据库文件的扩展名,并在.lib文件中写入使用sqlite3函数调用数据库的方法。给用户一个你编写的函数的词汇表,函数名称被屏蔽,这样他们就不知道它是一个正在运行的数据库文件。数据库文件不需要 .db 扩展名,sqlite 就可以识别它。只需提供 sqlite_open 并将数据库名称包含为 database.bhjbkhj(其中 bhjbkhj 是您编写的随机扩展名)。 Sqlite 在这方面非常擅长识别数据库。
好了。问题无法解决。但是有两个选择。
我对 C# 有一定的了解。我被要求制作一个 SDK 以及我们的程序,以便客户可以使用我们的功能制作他自己的 UI。在 C# 中,我通过添加一个 DLL 来完成此操作。我不得不使用数据库文件 (.db) 来保存命令,并且成功了。现在我被要求在 C++ 中做同样的事情。我对 C++ 很陌生。但这是我从 MSDN 上读到并做的:
- 我创建了一个库项目。
- 添加数据库作为资源文件、sqlite3 header 文件和库文件(我在命令提示符下输入 lib 命令)。
- 创建了一个包含函数的 header 文件,并将所有函数定义写入 .cpp 文件。
- 构建它并从 lib 命令获取库文件。
到目前为止,还不错。现在,当我尝试使用此库文件和 header 时,我在构建期间遇到了以下错误。
error C2059: syntax error : '<'
error C2018: unknown character '0x7'
error C2018: unknown character '0x60'
error C2018: unknown character '0x7'
error C2018: unknown character '0x2'
error C2018: unknown character '0x1e'
error C2018: unknown character '0x18'
当我记得这些错误与我几天前遇到的相同时,我为此苦苦挣扎了一段时间。我实际上在 SE 中问了这个问题并得到了答案 (
所以我推断编译器正在尝试读取保存在库文件中的数据库文件,因此我得到了这些错误。
现在我有三个问题:
- 我说的对吗?编译器是否试图读取存储在 .lib 文件中的 .db 文件?
- 如果可以,请问大家有什么建议吗
- 此外,如果您认为我错了,我将不胜感激任何其他解释。
我正在使用 Visual Express C++ 2010。我使用 Visual Studio 附带的命令提示符来创建 .lib 文件。我创建 .lib 文件的参考是 https://msdn.microsoft.com/en-us/library/ms235627.aspx#BKMK_CreateAppToRefTheLib.
要部署的静态库文件中不能存放数据库文件。因为编译器总是通读库的内容。它表明它在您构建程序时正在读取它。
那么如果你的SDK要下发数据库怎么办?我有两个解决方案:
- 使用您的 .lib 文件和 .h 文件添加数据库文件,然后直接使用 SDK 提供命令词汇表。 (但是我不建议这样做)
- 更改数据库文件的扩展名,并在.lib文件中写入使用sqlite3函数调用数据库的方法。给用户一个你编写的函数的词汇表,函数名称被屏蔽,这样他们就不知道它是一个正在运行的数据库文件。数据库文件不需要 .db 扩展名,sqlite 就可以识别它。只需提供 sqlite_open 并将数据库名称包含为 database.bhjbkhj(其中 bhjbkhj 是您编写的随机扩展名)。 Sqlite 在这方面非常擅长识别数据库。
好了。问题无法解决。但是有两个选择。