|
흠....
혹시 widestring 을 일반 AnsiString 으로 변환 해서 그런게 아닐런지요..
예전에 ActiveX 만들때 ASP 에서 WideString 으로 넘어 온걸 일반
chars 및 String 으로 변환 할때 깨지던 문제가 있었는데요
WideCharToMultiByte 이놈으로 해결했는데
이 함수 사용하셔서 캐스팅 해보시면 어떠실런지..
정확한 답변이 아니라 죄송....
src -> widestring
dest -> 일반 char * buff
WideCharToMultiByte(CP_ACP, 0, src.bstrVal, -1, dest , sizeof(dest), NULL, NULL);
서비 님이 쓰신 글 :
: 정말 몇일을 고생하고 하다가 하다가 안되서 이렇게 도움을 요청합니다.
:
: 첨부파일에 이미지를 보시면..
:
: 상단에 있는 그리드가 WideString Type이구요..
: 하단에 있는 그리드가 AnsiString Type입니다.
:
: 總經理 <- 요놈이
: |\~=}뱓- <- 이렇게 보입니다.
:
: 뒤에 문자에 상관없이..
: 일반적인 문자들은 넣어봐도 괜찮은데..
: 유독 제일 앞에 總 이 문자가 들어가면 무조건 깨집니다.
: (물론 비슷하게 깨지는 문자가 더 있을거 같습니다.)
:
: 단순히 Edit 창에서는 잘 보이는데요..
:
: 소스를 찾아보면 텍스트의 Size를 구하는 부분인거 같고요..
: if WordWrap or MultiLineCells then
: Result.cy := DrawTextExW(Canvas.Handle,PWidechar(ws),Length(ws),r,DT_LEFT or DT_WORDBREAK or DT_NOPREFIX or DT_CALCRECT,nil)
: else
: Result.cy := DrawTextExW(Canvas.Handle,PWidechar(ws),Length(ws),r,DT_LEFT or DT_SINGLELINE or DT_NOPREFIX or DT_CALCRECT,nil);
:
:
: Grid에 그리는 부분이 다음 같습니다.
: if Win32Platform = VER_PLATFORM_WIN32_NT then
: begin
: Canvas.Brush.Style := bsClear;
:
: rect.Left := rect.Left - 1;
: rect.Right := rect.Right - 1;
:
: if CellWW or MultiLineCells then
: DrawTextExW(Canvas.Handle,PWidechar(ws),Length(ws),rect,DT_LEFT or DT_NOPREFIX or DT_WORDBREAK OR DrawStyle,nil)
: else
: DrawTextExW(Canvas.Handle,PWidechar(ws),Length(ws),rect,DT_LEFT or DT_NOPREFIX or DrawStyle or DT_SINGLELINE or DT_END_ELLIPSIS,nil);
: end
: else
: begin
: ExtTextOutW(Canvas.Handle,rect.Left,rect.Top,ETO_CLIPPED,@rect,PWideChar(ws),Length(ws),nil);
: end;
:
: C++ Builder 6인데요..
: 저 함수 자체의 버그인가요?
: 뭔가 해결 방법이 있을거 같은데..
: 몇일 째 계속 해결도 못하고 헤매고 있습니다;; 도와주세요 ㅜㅜ
|