2015-08-19 134 views
0

我很努力去理解,如果我可以防止暴露我正在构建的DLL内的某些函数调用。我想隐藏的函数调用是由sqlite3.dll公开的调用,我正在将其构建到另一个我自己制作的DLL中。 sqlite3.dll暴露出5个功能,其中一个看起来像这样的标题:隐藏依赖DLL函数

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.dll成我的应用程序通过链接到sqlite3.lib并包含sqlite3.h(前面的代码片段的源代码)。

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

我揭露的功能在我自己的DLL:

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

当我看到在我构建的输出提供的功能,让我的功能+从SQLite库5种功能。所有暴露的sqlite函数都具有类似于上面关于close()所示的声明结构。

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

回答

1

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