构造函数重载类获取链接器错误使用DLL?
Posted
技术标签:
【中文标题】构造函数重载类获取链接器错误使用DLL?【英文标题】:constructor overloading Class get Linker Error Using DLL? 【发布时间】:2014-03-14 06:38:11 【问题描述】:我创建了动态链接到 MFC 的常规 DLL。 在 dll 项目中构建 dll 之前,我使用了添加另一个类。这个类提供了更多的构造函数重载方法。 然后我在使用这个 lib 和 dll 文件包含项目后成功构建了 dll,然后在使用构造函数重载类时构建并获取链接器错误
我的班级名称:对象
Error 11 error LNK2001: unresolved external symbol "public: __thiscall AvinashiAMF::Object::~Object(void)" (??1Object@AvinashiAMF@@QAE@XZ) BuleCappServiceUseDynamicDllDlg.obj
Error 10 error LNK2001: unresolved external symbol "public: __thiscall AvinashiAMF::Object::Object(enum AvinashiAMF::ObjectType,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0Object@AvinashiAMF@@QAE@W4ObjectType@1@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) BuleCappServiceUseDynamicDllDlg.obj
Error 12 fatal error LNK1120: 2 unresolved externals D:\Test Aplications\Visual Studio 2008\Projects\BuleCappServiceUseDynamicDll\Release\BuleCappServiceUseDynamicDll.exe
【问题讨论】:
【参考方案1】:您可能没有导出您的课程。看这里http://msdn.microsoft.com/en-us/library/81h27t8c.aspx
此外,检查此类问题的好工具是depends.exe,它包含在Visual Studio 中,它允许您检查导出和导入的符号。
【讨论】:
所有导出的函数都有效,但我将“Object”类声明为“Object result;”它超越了链接错误 那么在你的可执行文件中使用它时,你可能会丢失头文件上的 dllimport。另请注意,命名类 Object 可能不是一个好主意,因为它可能与其他类冲突(在您的特定问题上可能不是这种情况)。这里有更详细的示例msdn.microsoft.com/en-us/library/aa271769(v=vs.60).aspx(请参阅“在数据上使用 __declspec(dllexport) 和 __declspec(dllimport)”中的预处理器条件,对您的课程使用相同的想法) 在哪里使用dllimport头文件?我还在 vs 2008 中包含 lib 文件【参考方案2】:有两种截然不同的动态链接库:隐式链接和显式链接。
简而言之,隐式链接是在编译时链接的。您需要一个导入库来链接(.lib)、带有函数原型的头文件以及正确使用 dllexport 和 dllexport 或使用 .def 文件。 在这种情况下,dllexport/dllexport 更易于使用。系统负责加载库 (DLL)。
显式链接是运行时链接。您不需要任何导入库或标题。您需要知道什么是函数签名。您必须显式调用 LoadLibrary 和 GetProcAddress 才能调用该函数。
要查看如何正确创建用于导出/导入的宏,请创建空的 Win32 项目,选择 DLL 并确保选中导出符号复选框。 在主头文件中,您将看到如何使用宏进行导入/导出的说明。
【讨论】:
以上是关于构造函数重载类获取链接器错误使用DLL?的主要内容,如果未能解决你的问题,请参考以下文章