Notice»

Recent Post»

Recent Comment»

Recent Trackback»

Archive»

« 2024/3 »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

 
 

ASCII 문자 코드

프로그래밍/C, C++ | 2009. 4. 15. 09:29 | Posted by 99%
ASCII 문자 코드 차트 1

ASCII 문자 코드 차트 2

출처

http://msdn.microsoft.com/ko-kr/library/4z4t9ed1(VS.71).aspx

:

STLport 설치 및 사용 For VC6

프로그래밍/C, C++ | 2009. 4. 6. 10:57 | Posted by 99%

STLport Configuration Manual

STLport 인스톨 문서번역 (RedPixel 님의 STLport 설치 문서 )

VC 6++용 STLport의 빠른 설치 가이드 (More Effective C++ 의 역자인 곽용재님의 STLport 설치 문서 )

개요

VC6에 포함된 STL은 딩컴웨어의 라이브러리를 사용하고 있으며 C++표준이 된 해에 발표된 툴이라 그런지 STL관련 문제가 너무 많다. 그래서 VC6을 사용하는 STL사용자들은 VC에 STLPort를 설치해서 사용한다. 다행히 VC최신 버젼은 STL에 많은 지원을 해주고 있으며 STL관련 기능도 많이 추가되어서 기본 STL라이브러리를 사용해도 무방하다.

MS VC6/7 STL 구현의 문제점
Visual Studio 버전 별 STL 지원
VC6 의 STL Platform 을 쓰지 말아야 하는 이유 한가지

※ STLPort 라이브러리는 SGI(실리콘 그래픽스)의 STL을 여러 가지 운영체제 및 개발 도구에서 쓸 수 있도록 포팅한 것
으로(현존하는 거의 모든 플랫폼과 컴파일러를 지원), ANSI 표준안을 충실히 따르고 있으며 이외의 비표준 라이브러리도 충실히 구비해 놓고 있는 공개 라이브러리이다.

STLPort 설치방법


다운로드
http://sourceforge.net/projects/stlport

STLport 는 5.0 부터는 wrapper 모드(컴파일러의 iostream사용)를 더 이상 지원하지 않아서 STLport의 iostream을
사용해야한다.
이전버전을 사용할때 wrapper모드를 사용할꺼면 입출력관련 컴파일과정이 필요없다.

STLPort의 입출력라이브러리를 사용할때 VC 프로젝트에서 CRT라이브러리를 DLL로 사용하면 STLPort관련 DLL도 같이 배포 해야된다. 좀 불편한 사항이라 Static라이브러리를 기본으로 사용하게 컴파일하는 방법을 같이 설명한다. (필자는 5.1.5를 사용중인데 그전 4.6.2를 사용할때 Static라이브러리로 컴파일이 잘 안되서 5.1.5로 바꿨다. Static라이브러리에 대한 설명은 5.1.5에서만 설명하겠다.)

※ VC6에 최신 Platform SDK을 사용하면 VC용 입출력라이브러리를 그냥 사용해도 상관없다는 분도 계신데 sstream을 사용하려고 선언하기만 해도 102개의 error와 9개의 warning이 발생하니 필자는 사용안할수가 없었다. ㅡ.ㅡ; (4.6.2 사용시..)

STLPort 5.1.5, 5.2.0 설치

정적라이브러리(Static)로 사용방법은 아래 주석으로 표시한 두줄의 차이 밖에 없으며 configure에서 --rtl-dynamic 의미는 동적(dynamic) C,C++ 라이브러리 사용시 STLport를 정적으로(statically) 링크할 수 있도록 한다는 것이다. 위와 같이 설정하면 실제 컴파일된 결과물은 CRT라이브러리가 Multithread DLL설정으로 사용시 필요한 라이브러리만 생성되므로 아래 4,5번 과정을 --rtl-dynamic빼고 한번, 설정하고 한번으로 해서 컴파일하면 VC에서 CRT를 사용하는 3가지 쓰레드 모델에 모두 적용가능한 라이브러리를 만들수 있다.

STLPort를 다운받아서 압축을 푼다.

1. stlport\stl\config\user_config.h에서 아래값 설정
#define _STLP_NEW_PLATFORM_SDK   // Platform SDK를 사용하는 환경에서 사용
#define _STLP_USE_MFC                     // MFC 사용시

2. stlport\stl\host.h에 아래값 설정
#define _STLP_LEAKS_PEDANTIC 1
#define _STLP_USE_NEWALLOC 1
#define _STLP_USE_MALLOC 1


#define _STLP_USE_STATIC_LIB        // 정적(static) 라이브러리 사용시

3. cmd창을 띄우고 stlport폴더로 이동.

    cd build\lib를 입력

4. configure -c msvc6
    configure -c msvc6  --rtl-dynamic// 정적(static) 라이브러리 사용시는 --rtl-dynamic없이 4,5번 수행하고
                                                          --rtl-dynamic 설정하고 다시 4,5번 컴파일 과정을 반복한다. 

    ※ 5.2.0은 STLPort 루트폴더에 있고 '-c' 옵션은 configure설정에서 사라졌으므로 빼고 설정하면 된다.

-> configure --help로 도움말을 볼수 있다.

5. nmake /fmsvc.mak clean install

-> build\lib\readme 파일을 보면 nmake설정을 볼수 있다.

clean -> build\lib\obj폴더 내용삭제

install -> 컴파일해서 생성된 obj폴더의 내용을 stlport루트 폴더의 lib,bin으로 옮겨주는 작업까지를 말한다.

6. lib,bin폴더에 컴파일된 결과물이 생긴다.

확인후 lib 폴더 안에 파일을 ..\Microsoft Visual Studio\VC98\Lib안에 복사한다.

bin폴더 내용을 C:\Windows\System32에 복사한다.

7. ..\Microsoft Visual Studio\VC98\Include에 stlport 폴더를 복사한다.

8. VC++6에 경로 등록(가장 상위로 이동)

Include files: "..\Microsoft Visual Studio\VC98\stlport\include"


STLPort 4.6.2 설치

STLPort를 다운받아서 압축을 푼다.
1. stlport\
stl_user_config.h에서 아래값 설정
#define _STLP_NEW_PLATFORM_SDK 1 // Platform SDK를 사용하는 환경에서 사용
#define _STLP_USE_MFC                     // MFC 사용시

2-1. wrapper 모드로 사용하는 경우(컴파일러의 iostream 사용)
STLport에서 제공하는 iostream을 사용하지 않는 경우 컴파일할 필요가 없다.
- stl_user_config.h 파일의 # define _STLP_NO_OWN_IOSTREAMS 1 부분 주석 해제
- stlport 디렉터리를 ..\Microsoft Visual Studio\VC98\include에 복사
- VC++에서 Tool -> Option -> Directories -> include files 에 stlport 디렉터리 등록
- 위의 디렉터리를 상위로 설정하고 사용해야 STLport의 헤더 파일을 사용합니다.(설치 끝)

2.2. STLport의 iostream을 사용하는 경우
STLport 라이브러리를 컴파일해야 한다.
- 시작 버튼 메뉴의 Platform SDK 에 보면 Open Build Environment Window 라는 도스창 띄워주는 단축 아이콘이 있다. 이중에서 자신의 운영체제 맞는 것을 선택하여 도스창을 띄운다.
- STLport 압축을 푼 디렉터리에서 src 디렉터리로 이동
- nmake -f vc6.mak install (VC++ 6인 경우, 다른 컴파일의 경우 다른 make 파일 선택)
- 컴파일이 끝나면 헤더파일, lib(VC의 lib 디렉터리), dll(system32 디렉터리) 파일들이 설치된다.
- VC++에서 Tool -> Option -> Directories -> include files 에 stlport 디렉터리 상위로 설정 등록


문제 해결

위에서 _STLP_NEW_PLATFORM_SDK, _STLP_USE_MFC는 기본으로 설정해야 된다.

1. 설치시 error C2733 ... InterlockedIncrement... 에러가 발생한다.
(
c:\program files\microsoft visual studio\vc98\include\stlport\stl\_threads.h(122) :
    error C2733: second C linkage of overloaded function 'InterlockedIncrement' not allowed)

PlatformSDK 설치 후에 Visual Studio 6를 설치하거나 DirectX등을 설치할경우 IncludeSetting 에서Platform SDK Include Path 의 우선순위가 낮게 설정 되는데 Platform SDKInclude Path의우선순위를 제일 위로 올려주고
STLport-xxx\stlport\stl\config\stl_user_config.h 파일의 #define _STLP_NEW_PLATFORM_SDK 1
부분을 주석을 제거 해주시면 정상 처리 됩니다.

2. Visual C++ 에서 메모리 릭이 날 때?
stlport/stl/config/hosts.h에서
#define _STLP_LEAKS_PEDANTIC 1
#define _STLP_USE_NEWALLOC 1
#define _STLP_USE_MALLOC 1
를 설정해준다.

STLport에서 구현된 allocator로 인해 몇몇 릭을 검출하는 툴에서 메모리 릭이
발생하는데 진짜 메모리 누수로 생기는 릭이 아니라 릭을 검출하는 시점에 의해 생기는
잘못된 보고이다. 이러한 가짜 릭이 걱정된다면 이 전처리를 사용한다.
반드시 _STLP_USE_NEWALLOC 또는 _STLP_USE_MALLOC과 같이 사용해야 한다.



2009.10.11
이전엔 없던 에러가 발생한다. 예전에 받아논 STLPort파일(5.1.5)은 컴파일이 잘되는데 새로받은건 안된다;; 아직 해결못함.

NMAKE : fatal error U1077: 'cl' : return code '0x2'
-> 5.1.5에서 나는 에러다.

NMAKE : fatal error U1077: 'copy' : return code '0x1'

-> 5.2.0에서 나는 에러다.

참고
Visual C++ 2005에서 STLport 5.1.0 빌드 -> 컴파일 설정에 대한 자세한 설명
STLport 4.6.2,STLport 5.0.1,boost 1.33.1설치
STLPort 설치(윈도우즈 + Visual Studio C++ 7.0) v4.5.3

STLport 4.6.2 설치 방법 (참고사이트 볼것)
STLport 4.6.2 설치하기 & boost 1.31 설치 (Ver.0.2) (이택근님)

MSVC 플젝에서 STLPort사용(헤더파일 정의)

* 설치후 stlport 디렉토리를 컴파일러 설정에 추가한다.
(대개 C:/Program Files/Microsoft Visual Studio/VC98/include/stlport)
 추가하고 나서 이것을 첫 줄로 올립니다.

* 헤더파일 선언전에 아래껄 먼저 선언해라! VC6에서 4786 waring이 정신건강을 괴롭힌다 ㅡ.ㅡ;;
#pragma waring(disable : 4786)

1. stdafx.h에 선언하기
stdafx.h에 stl관련 헤더파일을 사용하겠다고 선언하면 2번과 같은 상황은 없다.

2. 일반 cpp파일에서 선언하기
#include <vector>를 #include "stdafx.h" 바로 밑줄에다 해보세요.
정확히 하자면

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

이거보다 전에 #include <vector>같이 stl헤더를 선언하면 된다.

:
기본 사용법

CString
CString str;
str.Format("%s%03d", szSomeVar, nSomeVar);

타입 안정성을 중요시하는 C++ 에서는 안타깝게도 CString의 Format 계열 함수가 제공 되지 않는다.
그래서 버퍼를 잡아 C의 런타임함수인 sprintf 함수를 사용하는수 밖에 없다.
그러나 C++에서는 stream 객체가 있으므로 sprintf 보다 우아(?) 하게 사용 할수 있다.

#include <sstream>로 사용할수 있으며 input/output/ input&output 버전이 따로 존재한다.

stringstream  in & out
ostringstream out
istringstream in

유니 코드 버전은 위의 클래스 네임에 w만 앞쪽에 붙여 주면되고
stringstream 내의 함수 중에 str() 멤버 함수로 string 클래스의 객체와 같이 연동해서 쓸 수 있다.

STL
#include <string>
#include <sstream>
#include <iomanip>
 
using namespace std;
ostringstream strStream;
strStream << szSomeVar << setw(3) << setfill('0') << nSomeVar;
string str = strStream.str();

BOOST
#include <boost/format.hpp>
#include <string>
 
std::string someString;
someString = boost::str(boost::format("%s%03d") % szSomeVar % nSomeVar);

CString의 Format에 해당하는 STL 코드와 BOOST 코드


직접 구현하기

1. 코드프로젝트
STL Format

CString의 Format같은 기능을 함수로 구현해 놓은게 있다.
근데 VC6에선 제대로 컴파일이 안된다. 우선 string의 clear는 stlport에는 없다.

2. 권진호님
sprintf 와 string 과의 만남

3. codein.co.kr

#define _MAX_CHARS 8000

int Format(std::string& txt, const TCHAR* szFormat,...)

{ 

    std::vector<TCHAR> _buffer(_MAX_CHARS);

    va_list argList;

    va_start(argList,szFormat);

#ifdef _UNICODE

    int ret = _vsnwprintf(&_buffer[0],_MAX_CHARS,szFormat,argList);

#else

    int ret = _vsnprintf(&_buffer[0],_MAX_CHARS,szFormat,argList);

#endif

    va_end(argList);

    txt.assign(&_buffer[0],ret);

    return ret;

}


4. 본인은 CString의 FromatV함수로 간단히 구현했음.  차라리 CString을 사용하는게 낫지 않냐고 하시면..
내부 구현은 나중에 제대로 테스트후 적용해도 된다. ㅋ

UINT StrPrintf( string& rstr, const char *pFmt, ...  )

    va_list args;
    va_start(args, pFmt);
   
    CString csMsg;
    csMsg.FormatV(pFmt, args);
    rstr = csMsg;
   
    va_end(args);
    return rstr.length();
}


'프로그래밍 > C, C++' 카테고리의 다른 글

boost  (0) 2009.09.25
stringstream 을 사용한 파일 읽기 사용 예제  (0) 2009.05.12
ASCII 문자 코드  (0) 2009.04.15
STLport 설치 및 사용 For VC6  (0) 2009.04.06
:

SharpDevelop v1.1&2.1 (&Mono)

프로그래밍/C#, Xamarin | 2009. 3. 17. 13:01 | Posted by 99%
Visual Studio라는 훌륭한 툴이 있지만 너무 비싸고 Express버젼은 기능 제약이 있습니다.
C#도 자바처럼 커맨드라인으로 컴파일을 할 수 있지만(닷넷 프레임웍이 있다면..)
빨리하고 쉬어야지~ 더 재밌는 거 만들어봐야하고~ ㅋ

윈도우용만 제공되며 C#, VB.NET, Boo 언어를 사용할 수 있고 Mono라는 C# 오픈소스 프로젝트도 사용가능합니다.
http://www.sharpdevelop.com/

SharpDevelop v1.1&2.1 포터블(http://portableapps.com 에서 찾아서 타고 들어갔습니다~)
http://sts.bkukr.de/l-davoss/blog/default.aspx?BlogId=21

SharpDevelop는 3.0까지 나와있으며 각 버젼별로 닷넷 1.1, 2.0, 3.0을 지원합니다.
3.0에선 아직 모노가 정식버젼이 안나와서 그런지 포함이 안되어 있는데요.

아래 사이트를 보시면 mono를 사용할 수 있는 방법을 알려줍니다.
저도 아직 적용은 안해봤구요.
포터블 제공하신 분이 아직 3.0은 안만드셨네요.;
http://mono.wikia.com/wiki/Using_Mono_with_SharpDevelop_3.0


참고
http://kuros.textcube.com/53
.NET을 위한 오픈소스 개발 환경 - #develop

:

모노사이트에서 다운 받은 VMware이미지를 VirtualBox에서 사용해보았다.
별 세팅없이 모노가 뜨는 것까진 쉬웠지만 해상도가 800x600밖에 지원 안된다.

게스트확장을 설치하려했다.. 여기서 부터다.. ㅡ.ㅡ;

 

설치순서를 먼저 설명한다. 다른건 다 바뀌어도 kernel-default를 먼저 업데이트하고 소스를 받는 부분은 지켜야된다.(삽질한 감으로..;;)

순서 밑에는 에러메세지에 따라 설치했던 순서인데 그대로 하면 끝내 인터넷이 안된다.

또는 갑자기 해상도가 다시 800으로 내려온다.

 

1. Control Center에서 언어를 korean으로 바꾼다.(리부팅)

기본 계정은

mono : mono 이다

root계정을 만들면 root패스워드를 입력하라고 한다.

지금은 mono입력

3번정도 import눌러준다


2. root계정에 password를 부여해서 루트계정으로 로그인 한다.

  1) sudo passwd를 입력하고 비밀번호를 입력한다.


2) logout을 해서 root계정으로 로그인 한다.


사용자 이름을  root 로
비밀번호(암호글)를 설정한 비밀번호로 입력한다.


3. install software(소프트웨어 설치)에서 kernel-default를 업데이트한다.(리부팅)


업그레이드 버튼을 누른다.

kernel-default를 찾아서 아래쪽에 정보창에 업그레이드를 누른다.

다시한번 확인창이 뜨면 확인을 눌러 업데이트를 시작한다.


4. 아래 명령으로 커널 소스를 설치한다.(gcc등은 아마 이미 있을 것이다.)

  sudo zypper install gcc make automake autoconf kernel-source


5. cd로 마운트 되어있는 게스트 확장을 설치한다.(리부팅)

root계정으로 들어간다!


6. 1024x768 해상도가 적용됐는지 확인하고 마우스가 리눅스안에 갇히는지도(캡쳐) 확인해보자.

또한 인터넷이 되는지도 확인한다.

 

7. mono에서 C++용 프로젝트를 만들어 보기 위해선

gcc-c++을 소프트웨어 설치에서 찾아 설치해준다.

소프트웨어 설치시 root계정의 비밀번호를 요구할것이다.

 


맑은 글꼴 적용하기
http://zodiac12k.egloos.com/953123

 

수세유저 모임(한국)

http://www.suselinux.co.kr/

:
먼저 VirtualBox를 다운받아 설정하자(포터블 설명)
http://bit1010.tistory.com/3
WMware나 VirtualBox가 이미 깔려 있을 경우는 아래로~

//////////////////////////////////////////////////////////////

http://www.mono-project.com/Main_Page

모노 프로젝트에선 VMWare용 이미지를 다운받을 수 있다.

openSUSE. 같은 노벨 지원 프로젝트.

VirtualBox에서 WMWare이미지 가져다 사용하는건 일도 아니다.

 

다만 게스트 확장 기능을 사용하려면 openSUSE11.0버젼에선

윈도우 호스트 VirtualBox 최신버젼을 사용할 것(2.1.4) 1.6.6은 사용할 수 없더라..



: