首先,我对dll编程很新。所以我正在编写一个UI dll,它可以帮助我完成我的项目。问题是我遇到了错误,并没有真正说出来,我有点困惑。 所以我有一个名为UIContainer的女巫应该是我的基类,所有其他人(按钮等)都来自这个类。因为我将它们保存在UIContainer类型的指针列表中,我将使用虚拟方法。但是当把虚拟语句放在我的方法之前它给了我错误,所以我研究了一个被发现的,我要将它们声明为纯虚拟方法,所以我创建了UIElement类,它只是UIContainer能够使用的接口虚拟方法,并且不必在每个派生自UIContainer的类中重新实现它们。但现在我得到这些错误并无法解释原因。有人有想法吗?
Error 42 error LNK2001: Unresloved external symbol ""__declspec(dllimport) const Button::`vftable'" (__imp_??_7Button@@6B@)".
Error 43 error LNK2001: Unresloved external symbol ""__declspec(dllimport) const UIContainer::`vftable'" (__imp_??_7UIContainer@@6B@)".
Error 44 error LNK2001: Unresloved external symboll ""__declspec(dllimport) const UIElement::`vftable'" (__imp_??_7UIElement@@6B@)".
Error 45 error LNK1120: 3 unresloved externals
(请注意,我试图用英语翻译错误,因为我来自德国并因此得到德语错误;))
答案 0 :(得分:0)
所以我发现了问题。 如果您在dll中使用虚拟方法,则必须为im / export声明所有方法分开。
举个例子:
#ifdef UICONATINER_EXPORTS
#define UICONATINER_API __declspec(dllexport)
#else
#define UICONATINER_API __declspec(dllimport)
#endif
通常你会把这个类定义为ex / import,如下所示:
class UICONATINER_API UIContainer
...
但是如果虚拟方法不起作用,你就这样做了 对于每种方法:
class UIContainer
{
...
UICONATINER_API void unfocused();
UICONATINER_API void draw();
...
}