我正在将旧的 vc++6.0 应用程序移植到 vs2005,我收到以下链接器错误,我花了几天时间试图找到解决方案。
错误LNK2019:无法解析的外部符号_imp_创建AwnService@52
在函数“public: int __thiscall”中引用
CMainFrame::CreateAsaNetworkServices(void)"
有一个第三方 C 库,定义了以下 API
extern "C"
{
DLLAPI IAwnServ * AWNAPI CreateAwnService(HINSTANCE hInst,
const char *pszDId, const char *pszDLoc,
AWN_DIQUAL DiQual, AWN_DOQUAL DoQual, int Prio,
const char *pszLicStr, const char *pszInfo,
AWN_REPEAT Repeat=R_LAST, TIME_T Since=0,
BOOL bLogin=FALSE, BOOL bDeb=FALSE);
DLLAPI IAwnSend * AWNAPI CreateAwnSend(const IAwnSend *pSend = NULL);
DLLAPI IAwnData * AWNAPI CreateAwnData(const char *pData = NULL, int iLen = 0);
DLLAPI IAwnHeader * AWNAPI CreateAwnHeader(const IAwnHeader *pHeader = NULL);
DLLAPI IAwnReference * AWNAPI CreateAwnReference(const IAwnReference *pRef = NULL);
DLLAPI IAwnFile * AWNAPI CreateAwnFile(const char *pFile = NULL);
DLLAPI IAwnOrder * AWNAPI CreateAwnOrder( const IAwnOrder *pOrder);
DLLAPI IAwnVehicle * AWNAPI CreateAwnVehicle( const IAwnVehicle *pVehicle);
DLLAPI int AWNAPI AwnCmp( const IAwnSend *pSend1, const IAwnSend *pSend2);
DLLAPI TIME_T AWNAPI AwnGetNetTime( const char *NetTime);
DLLAPI int AWNAPI AwnSetNetTime( char *NetTime, TIME_T Time);
DLLAPI TIME_T AWNAPI AwnMakeQueryTime( int MonthsBack);
DLLAPI struct tm *AWNAPI AwnSplitTime( TIME_T Time);
DLLAPI TIME_T AWNAPI AwnMakeTime( tm *ptm);
}
#endif
API调用如下:
m_pIAwnService = CreateAwnService( AfxGetApp()->m_hInstance, .........)
我已经检查了所有链接,包括等,但似乎找不到错误。
任何帮助深表感谢。
看起来您缺少 dll 的导入库,或者链接器在链接器 -> 输入 -> 其他依赖项中找不到它
库路径可以在链接器 -> 常规 -> 其他库目录中设置
头文件可能会尝试使用 #pragma 自动包含 lib 文件,因此您应该再次检查链接器是否可以找到该文件。
另一件需要检查的事情是使用 dependency walker 查看 DLL,并确保您尝试使用的函数的堆栈清理大小确实是 @52。也许变量类型的大小在编译器版本之间发生了变化(例如 typedef)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)