Q&A

  • C코드인데 대체 이게 무슨 말입니까?
지금 일본에에 관련된 프로그램을 짜구 있거든여..

근데 그게 WIN32와 C코드로 되어 있어서...

제머리론 분석이 안대는 군요..



HIMC m_hIMC;

DWORD dwBufLen;

LPCANDIDATELIST lpCandList;

LPSTR lpStr;



case IMN_OPENCANDIDATE:

m_CanMax = 0;

m_CanCount = 1;

dwBufLen = ImmGetCandidateList(m_hIMC, 0, lpCandList, 0);

if(dwBufLen == 0) break;

lpCandList = (LPCANDIDATELIST)new char[dwBufLen];==========> 이부분

ImmGetCandidateList(m_hIMC, 0, lpCandList, dwBufLen);

m_CanMax = (int)lpCandList->dwCount;

if(m_CanMax >= MAX_CAN_COUNT) m_CanMax = MAX_CAN_COUNT - 1;

for(i = 0;i < m_CanMax; i ++)

{

lpStr = (LPSTR)lpCandList + lpCandList->dwOffset[i]; ===> 이부분

strcpy(m_CanTbl[i], lpStr);

}

delete lpCandList;

lpCandList = NULL;

break;



2군데인데...

제생각으로는 lpCandList 을 동적 배열루 할당 하는거 같기두 하구...

new 뒤에 char[dwBufLen]이 글자가 엄청 아리까리 하네여..

암튼 해보니깐...IMM 유닛에

CANDIDATELIST 라는 구조체중 dwOffset이라구 있는데..

그걸 도움말에서 보니깐 뭐..영어루 배열루 생성된다 머 그렇게 써 있는거 같은데..

전혀 그럴 기미가 없구여..

암튼 지금 정신없이 헤메구 있습니다...쩝..

아시는분은 저좀 가르쳐 주세여..



2  COMMENTS
  • Profile
    2001.06.28 21:11
    김진호 wrote:

    > 지금 일본에에 관련된 프로그램을 짜구 있거든여..

    > 근데 그게 WIN32와 C코드로 되어 있어서...

    > 제머리론 분석이 안대는 군요..

    >

    > HIMC m_hIMC;

    > DWORD dwBufLen;

    > LPCANDIDATELIST lpCandList;

    > LPSTR lpStr;

    >

    > case IMN_OPENCANDIDATE:

    > m_CanMax = 0;

    > m_CanCount = 1;

    > dwBufLen = ImmGetCandidateList(m_hIMC, 0, lpCandList, 0);

    > if(dwBufLen == 0) break;

    > lpCandList = (LPCANDIDATELIST)new char[dwBufLen];==========> 이부분

    > ImmGetCandidateList(m_hIMC, 0, lpCandList, dwBufLen);

    > m_CanMax = (int)lpCandList->dwCount;

    > if(m_CanMax >= MAX_CAN_COUNT) m_CanMax = MAX_CAN_COUNT - 1;

    > for(i = 0;i < m_CanMax; i ++)

    > {

    > lpStr = (LPSTR)lpCandList + lpCandList->dwOffset[i]; ===> 이부분

    > strcpy(m_CanTbl[i], lpStr);

    > }

    > delete lpCandList;

    > lpCandList = NULL;

    > break;

    >

    > 2군데인데...

    > 제생각으로는 lpCandList 을 동적 배열루 할당 하는거 같기두 하구...

    > new 뒤에 char[dwBufLen]이 글자가 엄청 아리까리 하네여..

    > 암튼 해보니깐...IMM 유닛에

    > CANDIDATELIST 라는 구조체중 dwOffset이라구 있는데..

    > 그걸 도움말에서 보니깐 뭐..영어루 배열루 생성된다 머 그렇게 써 있는거 같은데..

    > 전혀 그럴 기미가 없구여..

    > 암튼 지금 정신없이 헤메구 있습니다...쩝..

    > 아시는분은 저좀 가르쳐 주세여..

    >



    무슨 소스인지는 잘모르겠는데요..

    일단 동적 배열로 할당하는거 맞습니다.



    > lpCandList = (LPCANDIDATELIST)new char[dwBufLen];==========> 이부분

    여기서 dwBufLen 크기의 메모리를 할당하고

    사용하는건데요..



    제생각으론 소스가 쫌 이상합니다.

    CANDIDATELIST 구조체 크기 만큼 메모리를 할당해야 할텐데..

    char타입의 배열로 할당하고 있고,

    또한 메모리 해제할때도 문제가 있습니다.

    배열로 할당한 메모리는

    delete [] lpCandList;

    이렇게 해제해 주어야 합니다.



    이소스만을 봤을때는 뭔가 쫌 잘못 된 소스인거 같습니다.



  • Profile
    김진호 2001.06.28 21:16
    꼴 wrote:

    > 김진호 wrote:

    > > 지금 일본에에 관련된 프로그램을 짜구 있거든여..

    > > 근데 그게 WIN32와 C코드로 되어 있어서...

    > > 제머리론 분석이 안대는 군요..

    > >

    > > HIMC m_hIMC;

    > > DWORD dwBufLen;

    > > LPCANDIDATELIST lpCandList;

    > > LPSTR lpStr;

    > >

    > > case IMN_OPENCANDIDATE:

    > > m_CanMax = 0;

    > > m_CanCount = 1;

    > > dwBufLen = ImmGetCandidateList(m_hIMC, 0, lpCandList, 0);

    > > if(dwBufLen == 0) break;

    > > lpCandList = (LPCANDIDATELIST)new char[dwBufLen];==========> 이부분

    > > ImmGetCandidateList(m_hIMC, 0, lpCandList, dwBufLen);

    > > m_CanMax = (int)lpCandList->dwCount;

    > > if(m_CanMax >= MAX_CAN_COUNT) m_CanMax = MAX_CAN_COUNT - 1;

    > > for(i = 0;i < m_CanMax; i ++)

    > > {

    > > lpStr = (LPSTR)lpCandList + lpCandList->dwOffset[i]; ===> 이부분

    > > strcpy(m_CanTbl[i], lpStr);

    > > }

    > > delete lpCandList;

    > > lpCandList = NULL;

    > > break;

    > >

    > > 2군데인데...

    > > 제생각으로는 lpCandList 을 동적 배열루 할당 하는거 같기두 하구...

    > > new 뒤에 char[dwBufLen]이 글자가 엄청 아리까리 하네여..

    > > 암튼 해보니깐...IMM 유닛에

    > > CANDIDATELIST 라는 구조체중 dwOffset이라구 있는데..

    > > 그걸 도움말에서 보니깐 뭐..영어루 배열루 생성된다 머 그렇게 써 있는거 같은데..

    > > 전혀 그럴 기미가 없구여..

    > > 암튼 지금 정신없이 헤메구 있습니다...쩝..

    > > 아시는분은 저좀 가르쳐 주세여..

    > >

    >

    > 무슨 소스인지는 잘모르겠는데요..

    > 일단 동적 배열로 할당하는거 맞습니다.

    >

    > > lpCandList = (LPCANDIDATELIST)new char[dwBufLen];==========> 이부분

    > 여기서 dwBufLen 크기의 메모리를 할당하고

    > 사용하는건데요..

    >

    > 제생각으론 소스가 쫌 이상합니다.

    > CANDIDATELIST 구조체 크기 만큼 메모리를 할당해야 할텐데..

    > char타입의 배열로 할당하고 있고,

    > 또한 메모리 해제할때도 문제가 있습니다.

    > 배열로 할당한 메모리는

    > delete [] lpCandList;

    > 이렇게 해제해 주어야 합니다.

    >

    > 이소스만을 봤을때는 뭔가 쫌 잘못 된 소스인거 같습니다.



    근데 이쏘스는 정말 잘 돌아 갑니다.

    문제두 없구여..C++만 있으면 디버그좀 해보고 싶지만....

    암튼 감사 합니다.