GitHub: https://github.com/Microsoft/vcpkg  

demo 영상: https://www.youtube.com/watch?v=y41WFKbQFTw

 

Visual C++에서 OSS의 라이브러리를 사용하기 위한 패키지 매니저.

 

인스톨 순서는 다음과 같다.

1. https://github.com/Microsoft/vcpkg.git 을 복제.

2. 복제한 디렉토리에서 powershell-exec bypass scripts\bootstrap.ps1 를 실행하여 빌드 한다.

3.  .\vcpkg integrate install 로 사용자 전체에 설치(첫 회는 관리자 권한 필요).

4. 패키지 설치는 아래처럼 한다
..\vcpkg install sdl2 curl

 

 

 

작업 예와 대응 패키지에 대해서:

https://github.com/Microsoft/vcpkg/blob/master/docs/EXAMPLES.md

 

MIT 라이선스.

 

 

출처: https://opcdiary.net/?p=32935

저작자 표시
신고
by 흥배 2016.09.30 08:00

유니버설 C런타임 라이브러리에 대해서

Visual C++2015에서는 C런타임(CRT) 라이브러리가 크게 리팩터링 되어서 Universal CRT(UCRT)와 그 이외의 런타임(vcruntime140.dll ) 2종류로 구성되어 있다.

 

UCRT에는 널리 이용되는 표준적인 C 런타임 라이브러리 코드가 구현 되어 있으며 안정된 API를 갖추고 있기 때문에 Visual Studio의 릴리스마다 버전 변경할 필요가 없는 Windows OS의 컴포넌트의 일부로서 자리 매김 되어 있다.

 

UCRT Windows 10에는 기본으로 설치되어 있지만 이전 OS에 대해서는 Visual C++2015 재 배포 가능 패키지를 사용하여 설치할 수 있다.

UCRT에 대해서는 아래의 블로그 글을 참조.

Introducing the Universal CRT

https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/  

 

애플리케이션 개발과 배포 시에 상기의 변경에 대해서 의식할 필요는 거의 없으나 CRT 배포 방법으로 "로컬 배치"를 검토하고 있는 경우에는 UCRT의 로컬 배치에 관하여 주의할 필요가 있다.

 

 

Visual C++2015에서 CRT 로컬 배치에 대해서

애플리케이션의 실행에 필요한 C 런타임 라이브러리를 실행 환경에 배포하는 방법으로는 재 배포 가능 패키지 등을 사용하여 시스템 폴더에 런타임을 설치하는 방법이 일반적이며, 이와 같이 시스템 폴더에 런타임을 설치하는 것을 "집중 배치"라 부른다.

 

이에 대한 시스템 요건 등에 의한 집중 배치를 채용하기 어려운 경우는 애플리케이션 배포 처 폴더에 런타임을 배치할 수 있으며 이러한 배치 방법은 "로컬 배치"라 부른다.

 

집중 배치와 로컬 배치에 대한 자세한 내용은 아래의 문서를 참조.

 

배치 방법 선택

https://msdn.microsoft.com/ja-jp/library/ms235316.aspx

 

로컬 배치할 때 Windows 10보다 이전의 OS에서는 전술의 UCRT도 실행 환경에 배치할 필요가 있다는 것에 유의하자. 구체적으로는 Visual Studio 2015를 설치한 환경에서 아래의 폴더에 있는 DLL을 모두 exe와 같은 폴더에 배치할 필요가 있다.

 

<UCRT 배포 원 폴더: 64 bit OS Visual Studio 2015를 설치하고 있는 경우>

(64 bit응용 프로그램용)C:\Program Files(x86)\Windows Kits\10\Redist\ucrt\DLLs\x64

(32 bit응용 프로그램용)C:\Program Files(x86)\Windows Kits\10\Redist\ucrt\DLLs\x86

 

또한 UCRT 이외의 CRT는 기존대로 redist 폴더 아래에 저장되어 있다.

 

<CRT 배포 원 폴더: 64 bit OS Visual Studio 2015를 설치하고 있는 경우>

(64 bit응용 프로그램용)C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\redist\x64

(32 bit응용 프로그램용)C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\redist\x86

 

 

Visual C++2015 응용 프로그램에서 C 런타임 라이브러리를 로컬 배치할 필요가 있는 경우에는 위 내용에 대해서 유의하자.

 

 

 

 

 

출처: https://blogs.msdn.microsoft.com/jpvsblog/2016/08/04/ucrt_local_deployment/

 

 

 

저작자 표시
신고
by 흥배 2016.09.20 08:00

C++로된 프로그램과 C#으로 만든 프로그램이 서로 패킷을 주고 받는 경우 외부 라이브러리를 사용하거나 C# 기본 기능을 사용한다.
외부 라이브러리로  CGDBuffer, protobuf, msgpack 등을 사용하거나 아니면 아래와 같이 직접 한다.

 

 

(C++)
// 패킷 헤더
struct PktHeader
{
 short PacketID;
 short BodySize;
};

 

// 로그인 패킷
struct PktReqLogin
{
 char UserID[17];
 char UserPW[17]
};

 

struct PktResLogin
{
 short ErrorCode;
};

 

 


[ C++ 서버로 패킷 보낼 때 ]
short packetID, string userID, string userPW;

 

var asciiUserID = System.Text.Encoding.Default.GetBytes(userID); // 멀티바이트 문자열. 유니코드 문자열은  System.Text.Encoding.Unicode.GetBytes
var dataUserID = new byte[16+1];
Buffer.BlockCopy(asciiUserID, 0, dataUserID, 0, asciiUserID.Length);

 

var asciiUserPW = System.Text.Encoding.Default.GetBytes(userPW);
var dataUserPW = new byte[16 + 1];
Buffer.BlockCopy(asciiUserPW, 0, dataUserPW, 0, asciiUserPW.Length);

 

List<byte> dataSource = new List<byte>();
dataSource.AddRange(BitConverter.GetBytes(packetID)); // 패킷 ID
dataSource.AddRange(BitConverter.GetBytes((Int16)(dataUserID.Length + dataUserPW.Length))); // 패킷 데이터(body)의 크기
dataSource.AddRange(dataUserID);
dataSource.AddRange(dataUserPW);

 

var send_data = dataSource.ToArray() // byte[]로 변환

 

 

[ C++ 서버에서 패킷 받았을 때 ]
var recvData = Network.Receive(); // receive로 데이터 받음

 

var packet = new PacketData();
packet.PacketID = BitConverter.ToInt16(recvData, 0);
packet.DataSize = BitConverter.ToInt16(recvData, 2);
packet.BodyData = new byte[packet.DataSize];

 

var errorCode = BitConverter.ToInt16(packet.BodyData, 0);
      

 

struct PacketData
{
 public Int16 PacketID;
 public Int16 DataSize;
 public byte[] BodyData;
}

 

 

 

이것 이외에도 방식은 있으니 구글링도 해보기 바란다

 

저작자 표시
신고
by 흥배 2016.09.05 08:00
C++

https://www.infoq.com/news/2016/07/cpp17-feature-list-complete

핀란드 Oulu 미팅에서 ISO C++ 위원회는 C++17의 기능 목록 정의를 완료했다.

미팅에서는 다수의 새로운 언어 기능과 라이브러리 기능이 승인됐다.

여기에는 constexpr iftemplate<auto>, 구조화 제한 등이 포함 되었다.

 

위원회 멤버 Jens Weller씨에 의하면 이로써 기능 리스트는 종료 되었고, 리뷰 기간이 시작된다고 한다.

"다음 2회 미팅에서는 주로 각국 기관에 의해서 이루어진 검토, 피드백, 과제에 대하여 다룹니다.표준에 새로운 것을 추가하는 것은 없지만 마이너 혹은 중요한 변경이 더해질 가능성이 있습니다."

 

 

 

 

본인은 2009년부터 지금의 C++11을 공부했는데 2011년에 C++11이 나온 후 벌써 5년이나 흘렀고 이제 1년 정도 더 있으면 새로운 표준인 C++17이 나온다.

 

C++ 프로그래밍을 하는데 C++11이나 차기 표준인 C++17이 꼭 필요한 것은 아니지만 이 좋은 기능을 사용하지 않는 것은 엄청난 낭비라고 생각한다(물론 사용하고 싶지만 레거시 코드 때문에 사용 못하는 경우는 어쩔 수 없지만).

 

아직 C++11도 공부하지 않은 사람들이 꽤 있는 것으로 안다.

내년에 17까지 나오면 새로운 C++을 따라가기가 더 벅차질 테니 지금부터라도 조금씩 C++11을 공부해서 내년에는 C++17도 순조롭게 이어서 공부하기 바란다.

 

근래에 나온 C++ 책을 통해서 공부할 수 있고 아니면 구글링(특히 네이버)를 통해서도 C++11에 대해서 공부할 수 있으니 공부하는데 전혀 어려움은 없을 것이다.

 

저작자 표시
신고
by 흥배 2016.08.16 08:00

이 문서는 NEXT의 게임 클라이언트/서버 과정 학생이 정리한 것이다. 



저작자 표시
신고
by 흥배 2016.06.27 08:00

이 문서는 NEXT의 게임 클라이언트/서버 과정 학생이 정리한 것이다. 




저작자 표시
신고
by 흥배 2016.06.21 08:00

이 문서는 NEXT의 게임 클라이언트/서버 과정 학생이 정리한 것이다. 




저작자 표시
신고
by 흥배 2016.06.07 08:00

Visual Studio 2015 빌드 기준


다운로드 받은 Poco 라이브러리를 압축을 푼 후 해당 디렉토리에서 cmd를 실행한 후 아래의 명령어를 실행한다.


x86

buildwin.cmd 140 rebuild all both Win32


x64

buildwin.cmd 140 rebuild all both x64



좀 더 자세한 것은 아래 글을 참고

http://stackoverflow.com/questions/30374503/building-poco-c-libraries-on-windows-from-commandline

저작자 표시
신고
by 흥배 2016.06.02 08:00

이 문서는 NEXT의 게임 클라이언트/서버 과정 학생이 번역/정리한 것이다.
http://icecola89.blogspot.kr/

저작자 표시
신고
by 흥배 2016.05.30 08:00
이 문서는 NEXT의 게임 클라이언트/서버 과정 학생이 정리한 것이다.
저작자 표시
신고
by 흥배 2016.05.23 08:00

티스토리 툴바