버그 해결을 위한 모든 질문을 던져
0 votes
226 views

안녕하세요.

게임코디 가입해 첫 게시물이 질문글이 되었습니다.

 

서버 관련한 포트폴리오를 작성 중입니다.

참고하는 서적이 있어 그대로 따라 치면서 공부 중입니다.

RDBMS는 MSSQL을 사용하고 DB에 접근하는 방식은 ADO를 사용합니다.

서버 동작과 관련한 부분은 정적 라이브러리로 만들었고 DB 처리도 해당 라이브러리 안에서 이뤄집니다.

여기까지는 컴파일 문제가 없었는데요.

 

이 라이브러리를 이용해 로그인 서버를 만들어보고자 솔루션에 [로그인서버] 프로젝트를 추가하고

[로그인서버] 프로젝트에서 [서버 라이브러리]를 참조 추가했습니다. 

[로그인서버] 프로젝트의 미리 컴파일된 헤더(pch.h)에는

[서버 라이브러리] 사용을 위해 인클루드를 한 줄을 넣었을 뿐인데, ADO 관련한 오류가 100개가 넘게 생기네요.

[로그인서버] 프로젝트에서 인클루드만 하면 오류 파티가 열립니다.

구글에서 msado compile error 등으로 검색해봤지만 제가 겪은 문제에 관한 게시물을 찾지 못했습니다.

[서버 라이브러리] 안에서 ADO 관련한 처리는 AdoDatabase.h에서 이루어지며,

전술한 것처럼 [서버 라이브러리] 프로젝트만 컴파일할 때는 오류가 생기지 않습니다.

임포트 부분은 다음과 같습니다.

#pragma once
#include "pch.h"
#include <Ole2.h>
#include <comdef.h>
#include <comutil.h>
#include <conio.h>

#import "C:\Program Files\Common Files\system\ado\msado60.tlb" rename("EOF", "EndOfFile")

using DbConnectionPtr	= ADODB::_ConnectionPtr;
using CommandPtr		= ADODB::_CommandPtr;
using RecordPtr			= ADODB::_RecordsetPtr;

class AdoDatabase : public Database
{
	DbConnectionPtr		db_connection_;
	wstr_t				connection_str_;
	wstr_t				db_name_;
	Thread*				thread_;

public:
	AdoDatabase();
	virtual ~AdoDatabase();
...
};

 

[로그인 서버] 프로젝트에서는 pch.h에 [서버 라이브러리] 헤더를 인클루드한 게 전부입니다. LoginProcess.h도 인클루드 되어 있지만 내용은 비어 있습니다.

#ifndef PCH_H
#define PCH_H

// 여기에 미리 컴파일하려는 헤더 추가
#include "framework.h"
#include "ServerLibrary.h"

#include "Server/LoginProcess.h"

#endif //PCH_H

 

[ServerLibrary.h]는 다음과 같습니다.

#pragma once
#include "pch.h"

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "mswsock.lib")
#pragma comment(lib, "Winmm.lib")

#include <WS2tcpip.h>
#include <WinSock2.h>
#include <MSWSock.h>
#include <mmsystem.h>
#include <WS2spi.h>
#include <mstcpip.h>

#include <Windows.h>
#include <iostream>
#include <io.h>
#include <cstdlib>
#include <stdio.h>
#include <cstdint>

...

#include "Net/Terminal/TerminalSession.h"
#include "Net/Terminal/Terminal.h"
#include "Net/Terminal/TerminalManager.h"
#include "Database/Database.h"
#include "Database/AdoDatabase.h"
#include "Database/QueryRecord.h"
#include "Database/QueryStatement.h"
#include "Database/Query.h"
#include "Database/DbManager.h"

#include "Shutdown.h"

 

오류 현황은 사진으로 보여드리겠습니다. 4장입니다.

 

표준이 아니라고 하는 부분의 코드는 msado60.tlb에 있습니다.

 

이어서 오류입니다.

[서버 라이브러리] 단독으로 컴파일할 때는 문제 없었는데 [로그인 서버] 프로젝트에서 참조해서 컴파일하니까

왜 오류가 나는 걸까요? 궁금합니다.

3주 내로 포폴 마무리하고 9월부터 취업 활동을 하려고 계획 중인데

사실상 코드 작성 관련한 지식은 이 서적, 공부에 활용하는 이론 서적 3권으로 독학 중입니다.

이 시기 잘 극복해서 포트폴리오 마무리하고 싶습니다. 도움 부탁드립니다!

asked (24 point) , 226 views

1 답변

+1 vote
제가 msado60.tlb를 import 해보니까, 전방 선언 관련 오류는 아마 경고일 것입니다. 그런데 프로젝트 설정에 경고를 오류로 취급하는 설정이 있는 것 같고요.

그럴 때는 다음과 같이 해당 경고를 끄는 것는 처리를 하면 됩니다.

#pragma warning(disable: 4471 4710)
#import "C:\Program Files\Common Files\system\ado\msado60.tlb" rename("EOF", "EndOfFile")
#pragma warning(default: 4471 4710)

나머지는 저도 모르겠군요. ^^
answered (185 point)
답변 감사드립니다 :)

#pragma warning을 넣어도 열거형 전방 선언 오류가 사라지지는 않네요ㅜㅜ
문제가 해결되어 답글 남깁니다. 프로젝트 속성에서 "언어 확장"을 사용 안 하니까 뜨는 오류더라구요!

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

253 질문
388 answers
395 댓글
508 users