没有dll可以满足__declspec(dllimport)符号吗?

时间:2016-02-15 12:43:57

标签: visual-c++

可以使用预处理器(例如/Dfree=my_debug_free)覆盖C运行时函数,但是在给定项目的上下文中,必须匹配重新定义的符号的链接有时是不合需要的或笨拙的。

有没有办法强制符号的dllimport链接满足来自静态.lib或.obj的符号?

让我们假设直接修改调用代码,或者定义掉__declspec关键字本身是不可能的。

1 个答案:

答案 0 :(得分:0)

用我发现的内容回答我自己的问题:

__declspec(dllimport)所做的一件事就是说有问题的函数从导入器的角度添加了前缀__imp_,所以手动添加前缀函数,你就满足了链接。

据我所知,这些__imp_是.dll对应的.lib文件通常提供的位。如果你为.dll剪切了.lib的链接,那么你也要切掉它们,所以必须自己手动填充__imp_形状的洞。

https://msdn.microsoft.com/en-us/library/aa271769(v=vs.60).aspx有一个很好的概述。

所有这一切,我发现使用预先包含的文件(/ FI或-include)首先#include原始(未定义)定义,然后在输入代码之前使用#defines重新定义它们而不是使用/ D来重新定义它们,即使在原始定义中也是如此。以这种方式做到这一点,你不必担心.dll的东西。