FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[3440] Re:IBPP 골치 아픈 문제 .. 유니코드 형식
안지훈 [] 5712 읽음    2010-05-17 11:30
안지훈 님이 쓰신 글 :
: IBPP로 원격으로 DB 파일 생성 및 테이블만들기 데이터쓰기, 지정 쓰기, 지정 불러오기, 전체 불러오기등등
:
: 을 구현 했는데요 간단히 사용할 수 있도록 제가 따로 조합해서 클래스를 만들어 놓았거든요.
:
: 한참을 하고 나서 다른 프로젝트에 턱 붙이려고하니까
:
: IBPP 요놈이 멀티바이트 기반으로 되어있더라구요. 클래스 집어 넣을 코어 프로그램이 유니코드 형식으로 되어있어서
:
: IBPP.cpp 에서 문자열 정보들을 다루는 부분에 많은 에러가 잡힙니다.
:
: 쿼리 문을 쓰는 기본 함수 부터 전부~
:
: 이를 어찌해야하나요 ..
:
: 유니코드 -> 멀티 바이트로 IBPP 바꾸는 법을 찾긴 했는데 이렇게해도 잘 되지 않습니다.
:
: 혹시 유니코드 형식으로 변환된 IBPP 를 가지고 계신분이나 혹 해결책을 알고 계신분은 있으신가요?
:
:
:
: .///////////////////
:
: bpp 유니코드환경으로 수정(hack)하기
: Line 44: from #define REG_KEY_ROOT_INSTANCES "SOFTWARE\\Firebird Project\\Firebird Server\\Instances" to #define REG_KEY_ROOT_INSTANCES TEXT("SOFTWARE\\Firebird Project\\Firebird Server\\Instances")
:
: Line 45: from #define FB_DEFAULT_INSTANCE "DefaultInstance" to #define FB_DEFAULT_INSTANCE TEXT("DefaultInstance")
: Line 87: from ::OutputDebugString(("IBPP: " + p->str() + "\n").c_str()); to ::OutputDebugString((const TCHAR *) ("IBPP: " + p->str() + "\n").c_str());
: Line 111: change char fbdll[MAX_PATH]; to TCHAR fbdll[MAX_PATH];
: Line 142: change mHandle = LoadLibrary(path.c_str()); to mHandle = LoadLibrary((const TCHAR *) path.c_str());.
: Note: There has got to be a cleaner way of doing this than just casting. Check MSDN or the Platform SDK for documentation on MultiByteToWideChar() under User Interface, International Text Display, Unicode and Character Sets.
: Line 167: change char* p = fbdll + len; to TCHAR* p = fbdll + len;
: Line 170: change lstrcat(fbdll, "\\fbembed.dll"); to lstrcat(fbdll, TEXT("\\fbembed.dll"));
: Line 175: change lstrcat(fbdll, "\\fbembed.dll"); to lstrcat(fbdll, TEXT("\\fbembed.dll"));
: Line 194: change lstrcat(fbdll, "bin\\fbembed.dll"); to lstrcat(fbdll, TEXT("bin\\fbembed.dll"));
: Line 204: change mHandle = LoadLibrary("fbclient.dll"); to mHandle = LoadLibrary(TEXT("fbclient.dll"));
: Line 209: change mHandle = LoadLibrary("gds32.dll"); to mHandle = LoadLibrary(TEXT("gds32.dll"));
:
:
: 출처:http://tnt64.blogspot.com/2007_04_01_archive.html
:
: ///////////////////////

자답 입니다 .. 위에 출처에 나온데로 문자열 부분에 TEXT 처리나 char 를 TCHAR로  전환 해준면 유니코드 환경에서 잘 작동합니다. 다만 입력할때는 문제가 되지 않으나 데이터를 불러올때 ibpp 에서 멀티바이트로 불러와 버린더군요
데이터를 가져다 쓰려면 중간에 ibpp에서 불러온 데이터를  멀티바이트를 -> 유니코드로 변환하는 함수를 사용 하여 문제를 해결했습니다.


그래도 몇몇 개의 Exception 에러 메세지가 "쀍쀍뷁" 로 몇가지 나오는 것이 있더 군요
이문제는 해결이 안되었으나
일단 동작하는데는 문제가 없습니다.

+ -

관련 글 리스트
3436 IBPP 골치 아픈 문제 .. 유니코드 형식 안지훈 2924 2010/05/11
3440     Re:IBPP 골치 아픈 문제 .. 유니코드 형식 안지훈 5712 2010/05/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.