在导致错误控制台应用程序的库中使用MFC

MFC used in library causing error console application

本文关键字:MFC 应用程序 错误 错误控制 控制台      更新时间:2023-10-16

我正在尝试通过Visual c++使用任务计划。我用的是ctask。h(从这里)完成任务。然而,当我构建解决方案时(使用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;
}

我已经将"在共享DLL中使用MFC"设置为"在共享DLL中使用MFC"。

我没有看到任何迹象表明你实际上已经把CTask.cpp到你的项目。只包含头文件将导致您看到的链接器错误,您还需要.cpp。

您需要添加到您的项目CTask.cpp以及CTask.h。原来的项目http://www.codeproject.com/Articles/13089/Harnessing-the-task-scheduler可以编译没有任何麻烦-我刚刚检查了它!