블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2204)N
Unity3D (519)N
Programming (462)N
Unreal (3)
Gamebryo (56)
Tip & Tech (175)
협업 (30)
3DS Max (3)
Game (12)
Utility (104)
Etc (91)
Link (29)
Portfolio (19)
Subject (90)
iOS,OSX (35)
Android (3)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (1)
Memories (19)
Interest (37)
Thinking (34)
한글 (25)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (16)
Exercise (3)
나만의 맛집 (2)
냥이 (9)
육아 (2)
Total1,222,215
Today45
Yesterday392
Statistics Graph

달력

« » 2018.09
            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            

공지사항

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

C# - C++/CLI - C++ 연결 후,
IME 때문에 일주일여간 삽질한 걸 잊지 않기 위해 Log 남김.(혼잣말)

1) C# 툴에 C++ 클라이언트를 렌더링하게 클라이언트를 수정(exe를 Lib로 만들어버림)
2) 뜨긴 떴는데..한글이 안먹힘..
3) 디버깅 해보니 한글 변환 메시지가 안들어옴
   (WM_IME_NOTIFY는 들어오는데, IMN_SETCONVERSIONMODE 메시지가 안들어옴)
4) 좀 더 확인해보니 툴의 핸들로 IMC를 Get 하려고 했지만 NULL값이 돌아옴..-_-
5) 클라만 따로 돌리면 IMC 획득 잘하고 , 한/영 변환 잘됨.
6) 일주일여간의 온갖 경우의 수를 생각하며, 인터넷 뒤지며(IME 관련 자료 찾기힘듬..) 삽질..
7) 결국, 마지막으로 한 짓은..
    C#의 IME를 죽이고, IME를 직접 생성해서 사용했음. -_-;
    이것도 임시방편 같기도 하고..맞는건지..
    우선 되니깐..진행..


[사용한 IME 관련 API 함수]
        [DllImport("imm32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr ImmGetContext(IntPtr hWnd);

        [DllImport("imm32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr ImmReleaseContext(IntPtr hWnd, IntPtr hImc);

        [DllImport("imm32.dll", CharSet = CharSet.Auto)]
        public static extern bool ImmGetConversionStatus(IntPtr hImc, out int fdwConversion, out int fdwSentence);

        [DllImport("imm32.dll")]
        public static extern bool ImmSetConversionStatus(IntPtr hIMC, int fdwConversion, int fdwSentence);

[아래는 IME 생성관련 API 함수]
        [DllImport("imm32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr ImmCreateContext();

        [DllImport("imm32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr ImmAssociateContext(IntPtr hWnd, IntPtr hImc);

        [DllImport("imm32.dll", CharSet = CharSet.Auto)]
        public static extern bool ImmDestroyContext(IntPtr hImc);

Posted by blueasa
TAG ,

댓글을 달아 주세요

  1. 2018.01.28 23:04 신고 까마귀  댓글주소  수정/삭제  댓글쓰기

    저도 이문제 때문에 고민했는데
    멀티스레드를 쓰는 환경에서 ime동작에 문제가 생기는 것을 발견했습니다.
    클라이언트는 아마 싱글 스레드였을 겁니다.