【发布时间】:2014-01-02 08:09:12
【问题描述】:
我正在使用 vs2012 创建一个小型包装 dll,链接到另一个使用 VC6 构建的 dll (.lib)。
我收到如下链接错误:
error LNK2019: unresolved external symbol __imp__functionName@8
我将随 vc6 dll 提供的 lib 文件添加到链接行,就像我过去所做的那样……这里有一些版本问题吗? vc6 dll头文件以我认为标准的方式声明函数:
#define DLLIMPORT extern "C" __declspec(dllimport)
DLLIMPORT ULONG WINAPI functionName(...);
在 vc6 lib 文件上使用 dumpbin /exports 显示没有 imp 前缀和“@8”的“functionName”.. 不确定这是否是一个问题,或者只是 dumpbin 对我来说很好和解构。
我不是 Windows 用户,不知道为什么链接器找不到符号...帮助!
【问题讨论】:
-
寄回去,你不要了。您必须删除 DLLIMPORT 和 WINAPI,但如果它出现在 .h 文件中,这不太可能是正确的。
-
嗯,感谢您的评论,但为什么我必须放弃 DLLIMPORT 和 WINAPI? DLLIMPORT 告诉编译器/链接器我引用的函数将在 dll 中提供,这是正确的。 WINAPI是调用约定,也是正确的..
-
DLLIMPORT 表示 DLL 有一个 extra 导出,其名称以 __imp 开头。 WINAPI 说调用约定是 __stdcall ,它产生额外的@8。既然用dumpbin.exe找不到这些,就想发回去,对你没用。
-
那些相同的 H 和 LIB 在另一个项目中使用时还可以吗?还是您第一次尝试使用它们?
标签: c++ visual-studio visual-c++ dll visual-c++-6