Harshil Sharma
Harshil Sharma

Reputation: 2035

MFC used in library causing error console application

I'm trying to use Task Schedule throulg Visual c++. I'm using Ctask.h (from here) to do the task. However, when I build the solution (using Visual Studio 11), it says

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

When I switch to /MD, it gives this error

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

same is the case with other linking option. This is thecode I've typed:

#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;
}

I have already set "Use MFC in" to "Use MFC in shared DLL".

Upvotes: 0

Views: 638

Answers (2)

Leo Chapiro
Leo Chapiro

Reputation: 13984

You need add to your project the CTask.cpp as well as CTask.h. The original project http://www.codeproject.com/Articles/13089/Harnessing-the-task-scheduler can be compiled without any trouble - I just checked it!

Upvotes: 1

nvoigt
nvoigt

Reputation: 77304

I don't see any indication that you actually have put the CTask.cpp into your project. Including the header only will result in the linker errors you see, you need the .cpp, too.

Upvotes: 2

Related Questions