안지훈 님이 쓰신 글 :
: 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 에러 메세지가 "쀍쀍뷁" 로 몇가지 나오는 것이 있더 군요
이문제는 해결이 안되었으나
일단 동작하는데는 문제가 없습니다.
|