调用DLL中嵌入的静态lib函数

时间:2011-10-13 20:28:57

标签: c winapi dll

让我们说以下架构:

  • 在DLL中使用/链接静态库
  • DLL由可执行文件
  • 加载(隐式或显式)

是否可以从可执行代码访问静态库的代码而无需显式重新链接,也不能在DLL中插入包装函数? 换句话说,我正在寻找一种方法来进行依赖静态库代码的dll导出。

2 个答案:

答案 0 :(得分:4)

鉴于你的限制,答案是否定的。

原因是可执行文件对DLL的依赖关系或“call-ees”没有任何可见性。就可执行文件而言,他只知道DLL本身:在链接时,可执行文件只知道它从DLL中消耗的那些导出。他将针对DLL(如果所述DLL的依赖关系无法解析将失败)转向LoadLibrary(),然后调用所述DLL的导出。

如果由于某种原因无法静态链接DLL使用的库,另一种方法是将调用包装到所述静态库。这可能是很多电话的痛苦,但有其他人创建的自动化工具可以提供帮助。特别是我之前使用过这个来创建一个DLL的包装器,当我想截取一个特定的DLL时,它导出了数百个函数:http://www.codeproject.com/KB/DLL/CreateYourProxyDLLs.aspx

答案 1 :(得分:0)

答案很容易:是的。

唯一的要求是:

在静态LIB文件中,您必须为要导出的所有内容定义__declspec(dllexport)。 然后,当您将此LIB文件包含到DLL项目中时,您声明为__declspec(dllexport)的所有函数将自动进行DLL导出,并且可以从您的Exe访问。