【问题标题】:LNK2019 Against CArray Add, GetAt, GetSize, all includes are presentLNK2019 针对 CArray Add、GetAt、GetSize,所有包含都存在
【发布时间】:2012-09-23 18:01:25
【问题描述】:

我在尝试编译 DLL 时遇到了一些问题,但我无法看到此链接错误来自何处。

我的 LNK2019 是:

Exports.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: int 
__thiscall CArray<struct HWND__ *,struct HWND__ *>::Add(struct HWND__ *)" (__imp_?Add@?
$CArray@PAUHWND__@@PAU1@@@QAEHPAUHWND__@@@Z) referenced in function "int __stdcall _Disable(struct 
HWND__ *,long)" (?_Disable@@YGHPAUHWND__@@J@Z)

禁用(...)是...

static BOOL CALLBACK _Disable(HWND hwnd, LPARAM lParam)
{
  CArray<HWND, HWND>* pArr = (CHWndArray*)lParam;
  if(::IsWindowEnabled(hwnd) && ::IsWindowVisible(hwnd))
  {
    pArr->Add(hwnd);
    ::Enable(hwnd, FALSE);
  }
}

这是 Exports.cpp 中的第一个函数;它的正上方是

#include <afxtempl.h>

我安装了 Windows 7.1 SDK(并尝试重新安装它和 VS2010)。完全相同的项目在其他机器上编译得非常好,所以它不可能是代码本身。我花了无数的错误研究,这导致绝望地尝试改变解决方案文件中的随机值,包括不同的 Windows 头文件,等等。我最后的手段是完全重新安装操作系统(假设它实际上是 Windows SDK 不正确或其他问题)。

任何建议都会有很大帮助。

编辑: 我在 cpp 提供问题上添加了 /showIncludes,我确实看到 afxtempl.h 被包括在内。由于包含它的其他标题,它被多次包含,但它在那里(并且每次都来自同一个目录):

1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\afxtempl.h

【问题讨论】:

  • 顺便说一下,_Disable 违反了保留标识符的规则,因为它以_&lt;capital&gt; 开头。见here
  • 奇怪 - 我会在构建中添加 /showIncludes 以查看标头的确切来源。也许看看/E 选项生成的内容。看起来有些东西搞砸了AFX_INLINE 宏或其他东西。构建日志中是否有/DAFX_INLINE=something
  • @MichaelBurr 我看不到 DAFX_INLINE。我正在为 .cpp 添加一个 /showIncludes,这给我带来了麻烦,我会在它完成后更新问题。
  • @David:如果您在光标位于Add() 调用时执行F12Ctrl-Alt-F12,VS 会带您去哪里?如果您设置“预处理到文件”选项 (/P) 并搜索 ::Add,该声明(或那些声明)是什么样的?
  • F12 确实将 afxtempl.h 加载到 Add() 的 AFX_INLINE 定义中。现在用 /P 编译..

标签: c++ visual-studio-2010 visual-c++ dll linker


【解决方案1】:

只是为了回答这个问题——我最终从我们的 SVN 中重新检查了所有内容并重新编译了所有内容。我认为我们的一个项目出于某种原因搞砸了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2011-02-15
    相关资源
    最近更新 更多