유니코드 .. 멀티바이트 이놈들 -ㅅ-..

꼭 필요하긴하지만 ..막상쓰면 뷁쒧뗅뙓 같은 녀석들이다 -_ㅠ..

 

친절하게도

MultiByteToWideChar()

WideCharToMultiByte()

라는 함수를 제공해주지만..

 

굉장히 사용이 복잡하다는 문제점을 안고 있다.....

(크기설정 이나 옵션설정도 필요하다 -_-)

 

그래서 찾다 발견한 ...

 

#include <atlconv.h>
 USES_CONVERSION; // W2A , A2W를 사용하기 위한 디파인..

W2A() // 유니코드->멀티

A2W() // 멀티 -> 유니코드

 

 

사용하기전에

 USES_CONVERSION;

해줘야하는 점이 좀 복잡하긴하지만..

뭐 그래도 훨씬 간단한 것이다!!!!!!

 

 char szMult[] = "멀티녀석들!!";
 wchar_t szWide[] = L"유니코드닷";


 USES_CONVERSION;
 strcpy(szMult, W2A(szWide)); // 유니코드 -> 멀티바이트 복사
 _tcscpy(szWide, A2W(szMult)); // 멀티바이트 -> 유니코드 복사

 

뭐 그래도 훨씬 간단한 것이다!!!!!!

'C/C++언어 > 유니코드' 카테고리의 다른 글

CSting의 유니코드를 파일로 저장 & 로드 할때  (1) 2007.11.18
유니코드 정보 모음  (0) 2007.11.18
유니코드의 사용법  (0) 2007.09.06

최근 리눅스를 가지고 놀려고 하고 있습니다.
네트워크 프로그래밍을 하는데.. 역시 리눅스를 서버로, 윈도우에서 클라이언트를 가지고 놀기 위해...
하지만 컴퓨터가 한대 밖에 없으니

Virtual PC로 리눅스 환경을 만든뒤, 동시에 플밍 작업을 하려 했습니다만.

Visual PC는 MS에서 만든 프로그램.... 리눅스 설치가 간단치 않더군요.

특히 이런게 뜨니...  orz
인터넷에서 text 모드로 설치해라하고
노트북 주파수가 안맞는다니 하는것도 있고...
그냥 VMWare 를 쓰라고 하는데.. 이건 구하기도 힘들고, PC자원을 다 가져오긴 하지만.. 이런거 까지 하면서 쓰고 싶진 않고..

어쨋든..
설치법도 찾기 힘들고 해서... 이것 저것하다 설치에 성공해서 그 방법을 써볼려 합니다.

우선 아래의 wubi를 다운로드 합니다.
http://wubi-installer.org/

이 프로그램은 윈도우에서 유분투를 설치해주는 프로그램입니다.

그 다음, 윈도우 xp를 버추얼 pc로 설치 합니다.
여기서 중요한건 RAM을 512 이상으로 잡아 줘야 합니다
유분투 설치시 RAM 256을 필요로 하기에, 설치중 에러날 가능성이 있습니다.

그 다음,  인터넷에서 다운한 유분투(전 9.10 beta 버젼 (現2009-10-25 최신 버젼)을 마운트 시켰습니다.)


그리고 위 wubi 를 이쪽 Virtual PC 2007 안의 windowsXP 에 복사 한뒤 실행합니다.

Username 이나 Password를 설정해 주신뒤 Install 합니다.


인스톨 화면입니다. 이것만 한 1시간 반 걸리더군요 .. orz

거의 되면 재부팅 됩니다. 이때 마운트 해제를 해주셔야 하는건 당연!

재부팅 하면 위의 화면처럼 부팅시 메뉴가 나오는데 여기서 아래의 Ubuntu 로 진행


그리고 있으면
이런 화면이 뜹니다만...
걱정하지 마시고 기다려 봅니다.

전 한 5분정도 기다려서

이렇게 화면이 뜹니다



그리고 자기 맘대로 파티션 포멧하고


한동안 냈두면

화면 보호 모드인지.. 검은 화면이 나올떄도 있습니다만... 밑에 하드 돌아가고 있는거 봐선 먹통이 아닙니다..

잠시 다른 화면(버추얼 상태가 아닌 다른거) 하다 창돌리면, 다시 원상태로 돌아오더군요.

이거 설치도 한 1,2시간 걸린거 같습니다.
버추얼 PC에서 하는거니 참고 기다려 봅니다.



다 설치 되면 재부팅 되면서 다시 윈도우 or 유분투 설치 메뉴가 나오는데요. 유분투로 들어가 봅니다.
음 로딩화면 뜨고


그리고 유저이름과 암호 대라고 하네요.




아까 wubi에서 입력한 username 과 password를 무사히 입력하면 아래와 같이 유분투가 뜹니다.


음.. 이걸로 다시 놀것이 늘었습니다 ㅎ_ㅎ
이번 골든위크중 한국에 와있는동안 느려서 속쌔기던 도시바 노트북을 넘기고,
가장 가격 / 성능비를 보다가..
HP/컴팩 말곤 없어 이녀석을 다시 믿어보기로 했습니다..

(여기서 다시 믿어보겠다는건 저번 노트북이..
이런 !%#$#*^)&*#^!$ 상태로 버렸기 때문이죠 (물론 LCD, 하드,.... 팔수 있는 부품 다 때고)





음... 뭐 이것 저것 셋팅하고, 게임 하나 돌려보니 소음이 장난이 아니더군요...



뭔가 하고 speed fan 으로 온도를 재 보았습니다..


어?! gpu 가 100도 를 갈려고 하고 있..
(temp1, temp2 는 아마 cpu 각각 코어 온도인거 같고..)
geforce 8200 인걸 감안하면 이건 해도 해도 너무 한단 생각이 들더군요..

그러다가
http://withnotebook.tistory.com/79
이곳의 지포스 그래픽 칩셋의 불량문제를 보면서..

과연 이건 몇일 버티려나  ㅡ_ㅡ

설치 파일은

http://dev.mysql.com/downloads/mysql/6.0.html 

 설치법은
http://blog.naver.com/infopub/100052196232
여기 블로그를 참고..

 현재 6.0 alpha 버젼이 나와서 그걸 설치 했습니다..

 mysql 은... 무료버젼의 db 동접은 기본 100 ~ 500 정도 이지만.. (manual setting 으로 바꿀 수 있지만..) 여튼...
상용화 아닌 이상 그런 큰건 필요 없고, 어차피 sql 문법만 통하면 되는거니
상관없다고 봅니다...

(MS-SQL은 뭔가 C#이니 .asp 니... 쩝...귀찮 ㅡ_ㅡ.. )

 설치시, mysql 설치 유형에서 custom 으로 해서 include, lib 파일 모두 설치 할 수 있도록 해야 프로그래밍 하기 편합니다.

Visual Studio 셋팅은.. DirectX 하던식
Include, Lib 디렉토리 설정해 주면 됩니다...

리눅스에서 vi 를 쓸때.. make 파일 만들어서...

cc -c db.c -I/usr/include/mysql -lmysqlclient 와 같이 해줘야 하는거랑 같은 작업이죠

 기본 API 는

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

#include <stdio.h>
#include <windows.h>
#include <mysql.h>
#include <stdlib.h>

MYSQL mysql; // 자료형? 선언

void qur(char *a)
{
 if(mysql_query(&mysql, a)==0)
  printf("%15s 가 전달되었습니다\n",a);
 else
  printf("쿼리 전송 에러\n");
}


void prin()
{
 MYSQL_RES* res ;
 MYSQL_ROW row ;
 int fields;
 res = mysql_store_result( &mysql ) ;
 if(res!=0)
 {
  fields = mysql_num_fields(res) ;
  while(row = mysql_fetch_row( res ))
  {
   printf("%s \n", row[0]) ;
  }
 }
}
void main(void)
{
 
 mysql_init(&mysql) ;
 if(!mysql_real_connect(&mysql, "localhost",       // DB PC, IP
                                               "root",               // DB ID
                                               "1234",              // DB pw
                                                NULL ,  
                                                3306,                // DB Port
                                                (char *)NULL, 0))
   exit(1);
 else
  printf("연결되었습니다.\n") ;
 char qurey[1000]="show databases";
 qur(qurey);
 prin();
 qur("use rosagigantea");
 qur("show tables");
 prin();

 mysql_close(&mysql);
}

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

위의 소스를 main.c (cpp 도 상관없고) 로 copy 해서 alt+f8 로 정렬한뒤
libmysql.lib mysqlclient.lib 를 선언해 주고 (그 winmm.lib 나.. ws2_32.lib 같은곳에)
컴파일 해보고 libmysql.dll 파일 없다고 하면...

을 다운해서

성공하면... root의 database 모든 목록이 출력됩니다.
(물론 이전에 rosagigantea 라는 db를 미리 만들어 놨습니다 ;;)

중요한건.. 역시..

mysql_real_connect(&mysql, "localhost", "root","1234", NULL,3306, (char *)NULL, 0))
이 함수 겠죠..
뜻은, mysql 쿼리를 생성한다, localhost(즉 이 컴퓨터), id는 root, 암호는 1234, 기본DB 없고, port는 3306 이란 뜻입니다.

최종적으로 성공한 화면입니다..


  보면 show databases 로 모든 db를 표시해주고

use rosagigantea (이전에 create database rosagigantea 로 db를 생성했습니다) 로 rosagigantea 라는 db를 사용하고

show tables 로 안에 있는 모든 테이블을 보여주는걸로 끝납니다.

이걸... 모듈화 해서 서버 프로그램에서 이리저리 짓거리 하는게 핵심이죠..


이전... (거의 8개월전) 게임서버 프로그래밍 시간에 기말로 짜다가
( http://rosagigantea.tistory.com/276  <- 이것..)
리눅스라는 첨병과... vi의 공새로 ... 그래도 그럭저럭 짜놓은 게임서버 소스를

좀 리뉴얼 해 보았습니다.

서버 프로그램은 밑의 cmd 창

불행히도... 윈도우 비스타는 telnet 프로그램이 없기때문에...
윈도우 네트워크 프로그래밍 이란 책의 GUI 클라이언트를 좀 개량해서
(책의 소스는 보내서, 바로 받지 않으면 않되게 되어있는 에코 예제라서..)
만들었고..

그리고 역시 불행히도.. 윈도우는 epoll 이 없기 때문에... IOCP로 구조를 바꿧습니다..

음 그 외엔.... 윈도우용 my sql 을 이용해서 db 연동 까지....
이전의 C로 짠 알고리즘등을  C++의 신... STL 을 사용해서 여러가지로 알고리즘을
개량 해봤습니다...


... 그래서 되는거라곤 ...
1. 2D 가상 지형이 생성
2. 로그인 하면 DB에 저장된 정보를 토대로 현재 위치 지정됨
3. 2D 가상 지형상.. 이동 가능
4. 서로간 채팅 가능..
5. 주위 녀석들 누가 있는지 알 수 있음..
6. DB log, error 저장 등..

정도 이므로 진짜 게임 서버에는 확실히 많이 모자르네요..

그래서 이제 슬슬 클라이언트도 손을 댈래고 합니다.. >_<..
쩝.. 이국 생활 하면서.. 틈틈히 하는 열정.. 식지 않길.. orz

'윈도우 서버에 대해서' 카테고리의 다른 글

효율적으로 MSDN을 보는 방법  (0) 2010.08.08
윈도우 환경에서 MySql C 프로그래밍 세팅법  (0) 2009.03.18
MySQL C API 예제  (0) 2008.06.19
MySQL C API  (0) 2008.06.19
VC++과 Mysql C Lib 연동하기 팁  (0) 2008.06.19

+ Recent posts