본문 바로가기

C++

#define 문법.. while, Singleton while 문을 사용하다보면 의도치 않게 기본적인 실수를 할때가 있습니다..그러다 잘못하면 무한루프에 빠지게 되는데... #ifdef _DEBUG #define WHILE WHILE_DEBUG #else #define WHILE while #endif // DEBUG #define WHILE_DEBUG(type) \ int __nCount = 0; \ while( type ) \ if(++__nCount > 100000) \ { printf("[FileName:%s][Func:%s][Line:%d]",__FILE__,__FUNCTION__,__LINE__); break; } \ else \ void main() { int nCnt = 0; WHILE(1) { ++nCnt; } printf("결과값 : %.. 더보기
c++과 c#과의 패킷 전송시 '\0' 널문자 해결방법.. 서버는 c++ 클라이언트는 c# 일경우 c++에서 TCHAR[10] packet; ZeroMemory(packet,sizeof(packet)); stringCchCopy(packet,sizeof(packet),_T("12345678")); 이런식으로 문자열은 packet이란 배열에 입력을 하게 되면. packet[8] 과 packet[9]에는 0 값이 들어있게 됨니다. 이걸 패킷으로 전송해서 c#으로 받아 string temp = Encoding.ASCII.GetString(packet); 이렇게 받게 되면. 결과값은 "12345678\0\0" 이렇게 출력이 됨니다... 이거 해결방법은 쉽게... string temp = Encoding.ASCII.GetString(packet).trim('\0'); 더보기
TBB & PPL의 task_group(task)를 사용해보자.. 기존에 쓰래드 생성시 사용했었던 CreateThread와 _BeginThread도 있지만.. 병렬프로그래밍에서는 task라는게 새로 생겼습니다.. 코드부터.. #include #include #include #include #include #include #include #include #include using namespace std; const int MAX_LOOP = 10000000; const int THREAD_COUNT = 4; queue queTest; tbb::concurrent_queue queParallelTest1; tbb::concurrent_bounded_queue queParallelTest2; Concurrency::concurrent_queue queParallelTest.. 더보기
Visual Studio 2010 UTF-8 파일 저장 및 공백 탭 제거하기(완결판). 2011/08/25 - [ETC] - Visual studio 2010 소스 저장 UTF-8 로 하기 및 뒷줄 공백 제거 아래에 있는건 파일 저장 할때 자동으로 utf-8로 저장을 하는거라.. 가끔 원치 않는 결과를 낳을수도 있게에 필요할때 단축키로 하는 방법을 만들어 봤습니다. 일단 Alt + 11키를 눌르거나 도구 -> 매크로 -> 매크로 IDE로 매크로 IDE를 실행시킴니다. 탐색기에서 MyMacros쪽에 추가 -> 모듈 추가로 새로운 매크로 파일을 생성후 Public Module Module1 여기 아래 부분에 매크로를 작성하시면 됨니다.. Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports EnvDTE90a Import.. 더보기
Visual studio 2010 소스 저장 UTF-8 로 하기 및 뒷줄 공백 제거 Visual studio 의 기본 문자셋은 cp949 utf-8로 저장을 하려면 파일->고급 저장 옵션에서 설정을 해야만 한다... 하지만.. 매크로를 사용하면 되는데... 매크로를 이용한 utf-8 자동 저장하기 링크 주소 뒷줄 공백 제거 링크 주소 이걸 참조하셔서 하시면 되는데.. Public Sub DocumentEvents_DocumentSaved(ByVal Document As EnvDTE.Document) Handles DocumentEvents.DocumentSaved Dim path As String = Document.FullName MakeUTF8File(path) Dim result As vsFindResult 'Dim nameresult As String Try Document.Ac.. 더보기
BoostPool 사용하기.. BoostPool의 템플릿 버전입니다.. 그냥 상속받아서 new delete 하시면 됨니다.. #pragma once #include template class CBoostPool { public: void* operator new(size_t _size) { return m_bpool.malloc(); } void operator delete(void* _p) { m_bpool.free(_p); } protected: static boost::pool m_bpool; }; template boost::pool CBoostPool::m_bpool(sizeof(T)); class CTest : public CBoostPool { public: wchar_t m_szName[64]; }; void main(.. 더보기
c/c++에서 문자열 인코딩 변환! 유니코드 멀티바이트 UTF-8 쉽게 변환해보자~! 문자열을 인코딩 하는 방법은 여러가지가 있습니다.. 가장 널리 알려진 방법으로는 유니코드 -> 멀티바이트 wchar_t strUnicode[256] = {0,}; charstrMultibyte[256] = {0,}; wcscpy_s(strUnicode,256,L"유니코드"); int len = WideCharToMultiByte( CP_ACP, 0, strUnicode, -1, NULL, 0, NULL, NULL ); WideCharToMultiByte( CP_ACP, 0, strUnicode, -1, strMultibyte, len, NULL, NULL ); stl이용wstring strUni = L"유니코드"; int len = WideCharToMultiByte( CP_ACP, 0, &strUni[.. 더보기
error LNK 2005 xxxx이(가) MSVCRT(D).lib 혹은 LIBCMT(D).lib 에 이미 정의되어 있습니다.. 오류날때 대처방법 error LNK2005: _printf이(가) MSVCRTD.lib(MSVCR100D.dll)에 이미 정의되어 있습니다. F:\Project\GGangster\GGangster\libcmtd.lib(printf.obj) ...... ..... 수많은 오류가 나왔다.. 이와 같은 설정의로 에러를 경고로 나오게끔 하는 방법이 있지만 근본적인 해결방법도 아니고 수없이 많은 warning도 보기 좋지 않다.. 일단 이 오류가 나오는 원인은 빨간 색 부분의 런타임 라이브러리때문에 생기는 문제이다... 프로젝트를 진행하다 보면 외부 라이브러리를 많이 사용하게 되는데. 외부 라이브러리는 MT(d)로 컴파일 되어있으나 내가 사용하는 프로젝트는 MD(d)로 되어 있으면 어김없이 LINK2005 오류가 발생하게 된다.... 더보기
tr1 Random 사용하기 http://www.johndcook.com/cpp_TR1_random.html 간단하게 하면 #include #include void main() { std::tr1::mt19937 eng; // a core engine class std::tr1::uniform_int unif(1, 52); for (int i = 0; i < 5; ++i) std::cout 더보기
msado15.dll를 이용한 oledb사용시 CreateInstance(__uuidof(Connection)) 실패할때.. 빌드한 환경 windows7 Ultimate k 64 sp1 visual studio 2010 sp1 컴파일한 컴터에서는 아무런 이상없이 너무나도 잘된다.. 그런데 다른 곳에서 하면 db connect에러가 자꾸 나온다.. 도대체 뭐가 문제인지 몰라서 온갓곳을 다 찾아봤지만.. GG 안되는 컴터에 remode debuger 설치해놓고 디버깅해본결과 #import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename( "EOF", "adoEOF" ) no_namespace ......CreateInstance(__uuidof( Connection )); ......Com객체를 생성하지 못하는것이였다.."msado15.dll" 버전이 windows 7.. 더보기