我正在努力了解是否可以防止从我正在构建的 DLL 中公开某些函数调用。我想要隐藏的函数调用是由 sqlite3.dll 公开的调用,我正在将其构建到我自己制作的另一个 DLL 中。 sqlite3.dll 公开了 5 个函数,其中一个在 header 中如下所示:
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 文件导致了问题吗?该文件是自动生成的,所以我不确定里面有什么。
最佳答案
我找到了答案。 sqlite3.dll 被错误地指定为编译器的导出源。删除从 sqlite3.dll 导出函数的指令纠正了该问题。
关于c - 隐藏依赖的DLL函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104005/