Post List

2015년 9월 21일 월요일

MFC Project를 Visual Studio 2015로 Updade 시 발생하는 문제점들 (메모)

1. undefined __vsnwprintf_s

printf , scanf 계열의 함수들의 선언이 <stdio.h> , <conio.h> 등으로 옮겨졌습니다.
그래서 LNK2019, unresolved external symbol 오류가 발생 하는 것입니다.

#include <stdio.h> 식으로 관련 header 파일을 추가해주시면 해결됩니다.
소스 코드를 수정하는게 번거롭다면
legacy_stdio_definitions.lib 를 linker input에 추가하셔도 됩니다.

https://msdn.microsoft.com/en-us/library/bb531344.aspx

참조하시면 자세한 내용이 나와 있습니다.

2. 'LHANDLE' undeclared identifier

ToolkitPro v17를 사용하실 경우 발생합니다.
MAPIDefS.h 파일을 보면

#define __LHANDLE 이 namespace : Codejock -> MAPI 안에 있습니다.
MAPI.h 파일에 똑같에 있는 #define __LHANDLE 와 같은 내용입니다.

MAPI.h 파일을 열어보면

#define MAPI_H 가 있습니다.
이것을 활용하여

MAPIDefS.h 의 __LHANDLE 선언 부분을 #ifndef MAPI_H 로 살포시 감싸줍니다.

MAPI.H를 명시적으로 사용하는 Project에서
StdAfx.h 에서 toolkit을 include 하는 줄 위에 명시적으로
#include <MAPI.h> 라고 적어주면 됩니다.

3. LNK 에러들....

 위 1번에서도 얘기했듯 예전에는 include 가 필요없는 경우에도 2015에서는 명시적으로 해야하는 경우가 많으니 확인해보셔야 합니다.

제가 겪은 것 중에는 ToolkitPro v15에 있던 모듈을 2015용으로 Compile 시도하니 Link 오류가 나서 아래 해더파일을 추가해주니 해결되었습니다.

#include <ActivScp.h>

4. MSB4018 오류

1>------ Build started: Project: Buttons, Configuration: Release Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018: The "Link" task failed unexpectedly.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018: System.NullReferenceException: Object reference not set to an instance of an object.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.CPPTasks.Link.ForcedRebuildRequired()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.CPPTasks.TrackedVCToolTask.ComputeOutOfDateSources()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.CPPTasks.TrackedVCToolTask.SkipTaskExecution()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.Utilities.ToolTask.Execute()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.CPPTasks.TrackedVCToolTask.Execute()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__1.MoveNext()
위와 같은 오류가 날 경우 해당 Project 파일 내에

<Link><GenerateDebugInformation></GenerateDebugInformation></Link>
위와 같이 Link 안에 아무 내용도 없는 Tag가 있는 것을 찾아서 삭제하면 됩니다.

댓글 없음:

댓글 쓰기