본문 바로가기

쓰기

4. procTranslate 로 지정된 번역함수가 불렸을 때 자신이 어떤 컨텍스트로 불렸는지 아는 방법
현재 컨텍스트의 이름을 얻는 것 외에는 대부분 원하는게 가능할 것 같습니다. pObjectExtention 에 어떤 객체의 포인터를 넣어 놓고, procTranslate 가 호출되었을 때 그 값을 객체로 캐스팅해서 사용하면 객체의 분기문제도 해결될 수 있을 것 같네요

제 생각에는 현재 컨텍스트의 이름을 알려주는 것이 좋을 것 같은데요.. 예를 들어 보겠습니다.

상황) 이름과 대사부분이 서로 다른 포인트에서 잡히는 게임을 후킹합니다. 각 컨텍스트명은 각각
"NAME" 과 "TEXT" 라고 하겠습니다. 그리고 필터는 커스텀딕과 비슷한 역할을 하는데, 각 컨텍스트마다
다른 사전을 가지도록 합니다. 예를 들면 이름쪽은(마나카, 유이), 대사쪽은 (안녕하세요, 오랫만이에요)
뭐 이런..

문제 1) OnObjectInit 가 NAME, TEXT 컨텍스트 순으로 불렸습니다. 필터 쪽에서는 컨텍스트명을 알 수 없으니
첫번째 객체는 1, 두번째 객체는 2 로 명명합니다 (곧, NAME=1, TEXT=2). 그래서 데이타 파일을 다음과
같이 만들었다고 하겠습니다.

[1]
(일어)   마나카
(일어)   유이
[2]
(일어)   안녕하세요
(일어)   오랫만이에요

물론 (일어) 자리에는 각각의 한글에 해당하는 일어 내용이 들어있다고 합니다.. -_-

이제 게임을 종료시키고 새로 게임을 시작합니다. 이 때 반드시 NAME=1, TEXT=2 에 맞게 데이타가
들어온다고는 할 수 없지 않을까요? 또한, 만약 새로 선택지 포인트가 발견되어 선택지 컨텍스트가
생긴다면 각각의 데이터가 잘못된 컨텍스트에 배당될 가능성이 있습니다.

문제 2) 이 게임을 다른 작업자가 보고 데이타 파일에 부족한 부분을 보충하려고 합니다. 첫번째
데이타 파일 작업자는 대충 [1] = NAME, [2] = TEXT 라는 것을 알고 있습니다만 두번째 작업자는
[1] [2] 라는 숫자만 봐서는 이 숫자가 무엇을 뜻하는지 바로 알 수 없겠죠. 물론 이름과 대사 정도면
바로 구분이 가능하지만 대사와 선택지가 되면 바로 구분하기는 어렵죠. 결국 두번째 작업자는
각각의 컨텍스트에 무엇이 오는지를 게임을 다시 실행해보면서 하나하나 알아봐야 각각의 데이터
파일이 무엇을 의미하는지 알 수 있을 것 같습니다.

-------------------------------------------

뭐.. 사실 제 머리속에서만 상상한 거라 실제로는 별 문제 없을지도 모르겠습니다.. 만 한번 생각해 볼
필요는 있지 않을까 해서 문제제기를 합니다. 다른 분들의 의견은 어떠신지요?

분류 :
Talk
조회 수 :
15151
등록일 :
2009.12.24
01:16:16
엮인글 :
https://arallab.hided.net/30921/b2e/trackback
게시글 주소 :
https://arallab.hided.net/board_devtalk/30921

아랄

2009.12.24
02:14:42
음.. 좋은 지적을 해주셨군요.
맞습니다. 순서대로 컨텍스트를 생성하긴 하지만 앞으로 꼭 그렇다는 보장도 없죠.
컨텍스트의 이름을 플러그인도 알 수 있어야 하겠네요.
금방 떠오르는 방법들은 이렇습니다.

1. TRANSLATION_OBJECT 구조체에 cwszContextName이란 멤버를 추가해서, OnInitObject를 호출할 때 여기에  컨텍스트 이름이 세팅되어서 넘어온다.
- 장점 : 구조상 명확하고 단순.
- 단점 : 공통 헤더 변경으로 인한 모든 플러그인 재컴파일 필요

2. 컨텍스트는 TRANSLATION_OBJECT 구조체의 더블링크드리스트로 구성되어 있는데, 이중 헤더의 wszObjectOption 값이 컨텍스트의 이름이다.
[헤더     ] ->wszObjectOption == '컨텍스트 이름'
[Filter 1 ]
[Filter 2 ]
[Filter 3 ]
[테일     ]
- 장점 : 공통 헤더 변경 없음.
- 단점 : 꼼수같아 보이며 장기적으로 봤을 때 별로 좋아보이지 않음

어떤 방식이 좋을지, 또는 더 좋은 아이디어가 있을지 댓글 부탁드립니다.

Hide_D

2009.12.24
03:06:23
아직 정식버전이 아닌만큼 근본적인 해결이 가능한 쪽을 선택하는 것이 좋다고 봅니다.

whoami

2009.12.24
10:26:30
1번이 간단해서 좋습니다.. ㅎㅎ

새 멤버가 구조체의 가장 마지막으로 들어간다면 예전 컴파일된 필터를 재컴파일 하지 않더라도
제대로 동작하지 않을까요? 뭐.. 제대로 재컴파일 하는게 좋겠습니다만.

아, 그러고보니. 재컴파일 이야기 나와서 생각난건데요. FontMapper 플러그인의 임포트 DLL 을 보면
MSVCR90.dll 과 MSVCP90.dll 이 있는데.. 이거 일반 XP 에서는 VC2008 런타임 패키지를 설치해야
제대로 작동할 겁니다. 아직은 별 오류보고가 없는 것 같습니다만 그래도 알고 계시는 것이 나을 듯. 

whoami

2009.12.25
19:13:17
TRANSLATION_OBJECT 에 대하여 조금 더..

pPreTransBuf 나 pPostTransBuf 를 보면 void * 형 이라는 것을 알 수 있습니다.
이게 char * 나 WCHAR * 형이 아닌 것으로 봤을 때.. 이 데이타가 0.2 때처럼 "/0 으로 끝나는  MBCS
캐릭터 문자열" 만이 오지 않을 것이라는 것을 짐작할 수 있지요.

그렇다면.. 이 데이타가 어떤 형식인가.. 를 알려주는 것도 있어야 하지 않을까요. 가장 간단한 예로는
"이건 유니코드 문자열이다" 라는 것을 옵션 같은 것으로 알려주어야 하지 않을까 싶군요.

... 그렇게 된다면, 알고리즘 플러그인 쪽에서 "이건 유니코드 문자열이다" 라는 것을 알려줄 방법이
있어야 하는데.. TranslateUsingCtx 의 인자는 LPCWSTR cwszContextName, LPVOID pSrcData,
int nSrcDataLen, LPVOID pTarBuf, int nTarBufLen 밖에 없다는 문제가 생깁니다.

이에 대한 다른 분들의 생각은 어떠신지요? (왜인지, 어려운 문제만 들고 오는 것 같아 죄송합니당 ㅜ_ㅜ)

Hide_D

2009.12.25
22:37:20
데이터가 MBCS로 통일된것으로 알고 있는데, 아닌가요?

아랄

2009.12.26
02:39:56
아~ 이부분은 일단 일본미연시를 위한 번역을 할 땐
잠정적으로 char* 형으로 통일하는게 좋을 것 같습니다.
물론 말씀하신 것처럼 미래에는 이것이

유니코드 문자열 일 수도 있고,
어떤 이미지 데이터가 될 수도 있고,
이진 파일 특정 부분의 데이터일 수도 있습니다.

현재까지는 아랄트랜스가 일본어 문자열을 번역하는데만 쓰이므로
그냥 멀티바이트 일본어 문자열로 간주하는게 어떨까요? ^^

아랄

2009.12.26
02:42:53
사실 데이터 타입을 의미하는 상수를 아랄트랜스 나름대로 정의해도 되겠지만
뭔가 이렇게 스탠다드 하지 않은 자신만의 개념을 계속 만들어 가는걸 좀 꺼려해서 ^^;;
다른 분들의 의견은 어떤가요?

whoami

2009.12.26
15:34:10
뭐.. 저는 버퍼가 void * 형으로 정의된 것을 보고 추리(라기보다는 상상?) 해서 질문한 것이니까요;;
나중에 컨텍스트에 대한 옵션을 주는 API 를 추가시키거나 해서 해결할 수 있을 듯도 싶습니다.
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
공지 Talk [필독] 테스트필터 사용시 주의사항 라파에 2008-08-03 155435
309 Talk [질문]UTF 코드를 SHIFT-JIS와 KS코드로 변환 [4] 호기심맨 2008-09-02 13979
308 Archive CustomDic 0.3 20080107 또 오류 OTL [5] file Hide_D 2009-01-07 13954
307 Talk 필터에 MFC로 모달리스 창을 띄웠을때=ㅅ=; [4] file Hide_D 2008-12-27 13934
306 Archive [플러그인, 소스] DenyWord 테스트 버전 20080921 file Hide_D 2008-09-21 13927
305 Archive 아야카시 실행파일 수정 [5] file 아랄 2009-01-02 13873
304 Talk 기리기리 버그, [6] Hide_D 2008-10-19 13829
303 Talk ATLAS 삽질중.. [3] file 아랄 2008-11-09 13771
302 Talk 아랄 디버깅에서 전체문장이 나오고 다시 한글자로 나오는 경우에서요 [2] file 암흑마제 2009-12-21 13666
301 Talk [질문] MBCS와 #UNICODE의 관계 [7] 호기심맨 2008-12-14 13663
300 Talk 고칠거? [10] Hide_D 2009-11-28 13651
299 Talk 참 오묘한 윈도우~ 호기 2009-04-04 13568
298 Archive [플러그인, 소스] ATCode 테스트 버전 20080721 [10] file whoami 2008-07-21 13514
297 Talk 번역기(eztransXP)가 만드는 몇가지 문제들 - 1 [1] Hide_D 2009-12-16 13432
296 Archive [플러그인, 소스] FixLine 테스트 버전 Archive(08.31 12:12 갱신) [1] file Hide_D 2008-08-30 13429
295 Archive [플러그인,소스] FixLine 테스트버전 081220_2 [2] file Hide_D 2008-12-20 13376
294 Talk [오류] 확장자가 ats 인 파일 실행시 오류 납니다. [1] 암흑마제 2009-12-20 13360
293 OtherFiles fixline 테스트 2차 file 처음처럼만 2008-12-16 13341
292 Archive [플러그인,소스] Korean Duplication Checker 20090115 [2] file Hide_D 2009-01-14 13333
291 Talk 아랄0.3 20일자 업데이트 적용시 구동 스샷(반반??) [4] file 암흑마제 2009-12-21 13303
290 Talk 튕기는 문제에 대해서 [6] Hide_D 2009-11-26 13286