0

我很难理解是否可以防止从我正在构建的 DLL 中公开某些函数调用。我要隐藏的函数调用是由我正在构建到我自己制作的另一个 DLL 中的 sqlite3.dll 公开的调用。sqlite3.dll 公开了 5 个函数,其中一个在标题中如下所示:

SQLITE_API int SQLITE_STDCALL sqlite3_close(sqlite3*);

此处使用的宏在前面定义为:

/*
** Provide the ability to override linkage features of the interface.
*/
#ifndef SQLITE_EXTERN
# define SQLITE_EXTERN extern
#endif
#ifndef SQLITE_API
# define SQLITE_API
#endif
#ifndef SQLITE_CDECL
# define SQLITE_CDECL
#endif
#ifndef SQLITE_STDCALL
# define SQLITE_STDCALL
#endif

现在,我通过链接 sqlite3.lib 并包括 sqlite3.h(先前代码片段的来源)将 sqlite3.dll 构建到我的应用程序中。

我意识到我可以使用这些宏来实现我想要的。

我在自己的 dll 中公开函数:

/* module entry point */
int __declspec(dllexport) __stdcall load_properties(CAObjHandle context);

当我查看构建输出中可用的函数时,我从 sqlite 库中获得了我的函数+5 个函数。sqlite 中所有公开的函数都具有类似于我在上面为 close() 显示的声明结构。

有没有办法可以隐藏 sqlite 函数?是导致问题的 .lib 文件吗?该文件是自动生成的,所以我不确定里面有什么。

4

1 回答 1

1

我发现了答案。sqlite3.dll 被错误地指定为编译器的导出源。删除从 sqlite3.dll 导出函数的指令更正了该问题。

于 2015-08-20T20:24:51.273 回答