c - 隐藏依赖的DLL函数

标签 c dll sqlite cvi

我正在努力了解是否可以防止从我正在构建的 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/

相关文章:

c# - 如何部署引用一个DLL的多个程序?

c# - SQLite 为 Windows WPF 桌面创建数据库

android - SQLite 主键自动增量不起作用

ios - 如何创建合适的 iOS CoreData 数据库模型?

python - Python 上确定是否由于内部条件在最后一次元素迭代中发生中断的最佳方法是什么?

c++ - 线程安全和位域

C: tcp recv 不清除旧数据

c - 在 Visual Studio 2012 中生成 .h 文件以及 DLL

c# - 从相对路径加载c#中的dll

c - C 语言的 ZeroMQ 示例无法编译;官方文档可能有错吗?