【问题标题】:MFC used in library causing error console application库中使用的 MFC 导致错误控制台应用程序
【发布时间】:2013-03-15 15:49:09
【问题描述】:

我正在尝试通过 Visual c++ 使用任务计划。我正在使用 Ctask.h(来自here) 做任务。但是,当我构建解决方案(使用 Visual Studio 11)时,它说

fatal error C1189: #error :  Please use the /MD switch for _AFXDLL builds

当我切换到 /MD 时,它给出了这个错误

ConsoleApplication12.obj : error LNK2019: unresolved external symbol "public: __thiscall CTask::CTask(void)" (??0CTask@@QAE@XZ) referenced in function _wmain
1>ConsoleApplication12.obj : error LNK2019: unresolved external symbol "public: void __thiscall CTask::SetStartDateTime(class ATL::CTime const &)" (?SetStartDateTime@CTask@@QAEXABVCTime@ATL@@@Z) referenced in function _wmain
1>ConsoleApplication12.obj : error LNK2019: unresolved external symbol "public: void __thiscall CTask::SetFrequency(enum CTask::ETaskFrequency)" (?SetFrequency@CTask@@QAEXW4ETaskFrequency@1@@Z) referenced in function _wmain
1>ConsoleApplication12.obj : error LNK2019: unresolved external symbol "public: void __thiscall CTask::SetProgram(wchar_t const *)" (?SetProgram@CTask@@QAEXPB_W@Z) referenced in function _wmain
1>ConsoleApplication12.obj : error LNK2019: unresolved external symbol "public: void __thiscall CTask::SetAccountName(wchar_t const *)" (?SetAccountName@CTask@@QAEXPB_W@Z) referenced in function _wmain
1>ConsoleApplication12.obj : error LNK2019: unresolved external symbol "public: long __thiscall CTask::SaveTask(wchar_t const *,int)const " (?SaveTask@CTask@@QBEJPB_WH@Z) referenced in function _wmain
1>ConsoleApplication12.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall CTask::~CTask(void)" (??1CTask@@UAE@XZ) referenced in function _wmain

其他链接选项也是如此。这是我输入的代码:

#include "stdafx.h"
#include "CTask.h"
#include <iostream>
using namespace std;




int _tmain(int argc, _TCHAR* argv[])
{
    CTask task;
    CTime time(2013, 03, 15, 7, 11, 0);
    LPCTSTR sTaskName( L"Task Name" );

    BOOL replace = TRUE;

    task.SetProgram( L"E:\\aaa.txt" );
    task.SetAccountName( L"harshilsharma63" );
    task.SetStartDateTime( time );
    task.SetFrequency( CTask::freqOnce );

    if( S_OK == task.SaveTask( sTaskName, replace))
    {
        cout << "task successfully created!";
        return 0;
    }
    else
    {
        cout << "task creation failed!";
        return 1;
    }


    return 0;
}

我已经将“Use MFC in”设置为“Use MFC in shared DLL”。

【问题讨论】:

    标签: c++ visual-c++ scheduled-tasks


    【解决方案1】:

    我没有看到任何迹象表明您实际上已将 CTask.cpp 放入您的项目中。仅包含标头会导致您看到的链接器错误,您也需要 .cpp。

    【讨论】:

      【解决方案2】:

      您需要将 CTask.cpp 和 CTask.h 添加到您的项目中。原项目http://www.codeproject.com/Articles/13089/Harnessing-the-task-scheduler 可以顺利编译,我刚查过!

      【讨论】:

      • 如何包含 .cpp 文件?我的意思是,我添加了#include "CTask.cpp" 但这不起作用。还有其他方法可以添加 .cpp 文件吗?
      • 在项目浏览器中右键单击源文件的父目录并选择“添加现有项目”-> CTask.cpp
      • 我将 CTask.cpp 添加到项目中,它出现在解决方案资源管理器的源文件中。但是当我构建它时,它给出了错误:无法打开包含文件:'MyTaskDemo.h':没有这样的文件或目录Wnen我添加了MyTaskDemo.h,然后它给出了这个错误:在包含这个文件之前包含'stdafx.h'用于 CTask.cpp 中的 PCH,即使 stdafx.h 包含在其代码中。
      • 您使用“预编译标头”选项,它希望首先包含“stdafx.h”!
      • 所以,我创建了一个新项目并禁用了使用“预编译头文件”的选项,但即使现在也出现了同样的错误。对不起,如果我问的是非常基本的问题,但我在这种多文件工作方面没有太多经验。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多