본문 바로가기

쓰기

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/98e/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 [필독] 테스트필터 사용시 주의사항 라파에 155439   2008-08-03 2008-12-16 00:03
144 Talk DumpText2 계획안 [6] file Hide_D 14432   2008-10-02 2009-01-06 01:24
 
143 Talk 0.3의 설계가 안되네요;; [6] 아랄 14431   2008-11-19 2009-01-06 01:22
미연시에 국한된 유틸이 아닌 이제 떳떳한(?) 범용 유틸로 거듭나려하니 욕심만 많아지고,, 리소스 편집기능, 후킹체인 다이어그램 표시 등... 모든 컨셉을 적용하자니 서드파티 플러그인 규격이 복잡해지고 으으.. 아무래도 0.2 레이아웃을 그대로 가져가야 ...  
142 Talk 음 제가 컴퓨터를 못하는 사람이라 뻘글일 수도 있겠지만.. [2] 쥬빌 14389   2008-12-30 2008-12-30 12:14
아랄 트랜스의 장점이 게임상의 대사가 바로 한글로 변환 표기되는 것이라 보는데요. 번역률을 높이기 위해 번역본이 있는 게임들은 ez트랜스가 아닌, 미연시 번역본 text과 연동하여 쓸수는 없을까요? ez와의 연동 구조를 잘 모르겠으나..게임상의 일어를 ez...  
141 Talk 어제 말씀드렸던것... 알아냈습니다. file 나는누구인감? 14332   2008-07-10 2008-07-10 14:17
 
140 Talk 0.3 atcode 플러그인. FrigateBird 14331   2009-12-22 2009-12-22 11:32
사용하면서 폰트셋 지정이 떨어져 나간 부분이 너무 횡하니 느껴지는데요. 그 부분에 코드 걸린것들을 표시하면 어떨까요. (별칭, 주소, 메모리 목록을.) 코드가 여러개 걸리면 그 조그마한 화살표로 왔다리 갔다리 하는것도 진절머리 납니다. ^^; 그리고 폰트...  
139 Talk 정식 아랄 플러그인으로 요청하시고 싶다면 Hide_D 14234   2009-07-10 2009-07-10 18:29
원칙적으로는 관리자님께 요청하는 것이 맞지만 관리자님은 유니크 몹이시기 때문에[...] 절 부르시면 소환해 드립니다. 원클릭 서비스도 가능할지도[..]  
138 Talk 히데님께서 말씀하신 기리기리 오류문제 입니다. [3] file 유르_레릴 14130   2008-11-30 2008-12-30 08:53
 
137 Talk Vmware 가상 일윈으로 즐기기.. [3] file ㅌㅌ 14029   2008-07-23 2008-07-24 21:11
 
136 Talk [질문]UTF 코드를 SHIFT-JIS와 KS코드로 변환 [4] 호기심맨 13984   2008-09-02 2008-09-16 23:09
안녕하세요... 요즘 Aral이란 프로그램 덕에 갑자기 컴퓨터가 좋아진 사람입니다. 다시한번 모든 개발자분께 감사하구요.. 저도 아주아주 미약한 실력이지만 .. 참여해 보려고 합니다. (Aral에 도움될 실질적 가능성 0.0001%) 제가 관심가지는 부분은 단순님이...  
135 Talk 필터에 MFC로 모달리스 창을 띄웠을때=ㅅ=; [4] file Hide_D 13934   2008-12-27 2008-12-30 08:29
 
134 Talk 기리기리 버그, [6] Hide_D 13829   2008-10-19 2009-01-06 01:48
기리기리에서는 라인 외부 함수로 @,*를 사용하고 내부 함수(매크로?)로 [] 를 사용하고 있는데, []안에 올바른 매크로가 들어가지 않는 경우, 튕겨버립니다 ezTransXP나 KiriKiri나 둘중에 한녀석 손좀 봐둬야 할듯 =ㅅ=; http://www.aralgood.com/zbxe/13278...  
133 Talk ATLAS 삽질중.. [3] file 아랄 13771   2008-11-09 2009-01-06 01:15
 
132 Talk 아랄 디버깅에서 전체문장이 나오고 다시 한글자로 나오는 경우에서요 [2] file 암흑마제 13666   2009-12-21 2009-12-22 23:37
 
131 Talk [질문] MBCS와 #UNICODE의 관계 [7] 호기심맨 13663   2008-12-14 2008-12-14 22:16
무모한 용기가 화를 부른다고.... '나도 필터란걸 만들어보자' 하고 쓸데없는 결심을 하는 바람에(결심만)...... 요새 1년을 기다려온 투3도 손도못대고 ....... Visual Studio 2005란거 깔고 낑낑대고 있네요.. (왜인지는 모르겠지만 현제 다운받은 아랄소스...  
130 Talk 고칠거? [10] Hide_D 13651   2009-11-28 2009-12-17 18:13
아랄 처음 켰을때 프로세스 먼져 보이는거 아랄만 아랄로 프로세스에 안뜬다는거. by 피시 제 덧[..] 이지트랜스 경로 지정하면 앞으론 고정해봅시다 ㅇㅇ  
129 Talk 참 오묘한 윈도우~ 호기 13568   2009-04-04 2009-04-04 01:02
실수로.... malloc으로 잡은걸 HeapFree 하고 있었네요... (머 정확히 말자면 HeapCreate로 새 힙영역 확보하고 할당 해제 하는걸 구축했습니다만.... 정작 할당부분에서 malloc을썼던거죠) 문제는 이렇게 잘못짠걸 1개월이나 지난후에 알았다는 겁니다. 즉 그...  
128 Talk 번역기(eztransXP)가 만드는 몇가지 문제들 - 1 [1] Hide_D 13437   2009-12-16 2009-12-16 21:32
이지트랜스가 만드는 몇가지 문제에 대해서 다뤄보려고 합니다. 우선 첫번째로 일본어의 히라가나, 또는 가타카나 한글자가 번역기로 입력될경우 결과물이 공백(length = 0)이라는 문제입니다. 이 문제는 대개 게임 엔진에서 '강제로 한글자씩 출력하는 경우'(...  
127 Talk [오류] 확장자가 ats 인 파일 실행시 오류 납니다. [1] 암흑마제 13360   2009-12-20 2009-12-20 21:08
auto run invalid parameter or setting file! 이라고 뜨는데요 확장자가 ats 인 파일을 실행시키면 이렇게 되네요 참고로 아랄0.3이고 0.3은 설치 잘 되었습니다.  
126 Talk 아랄0.3 20일자 업데이트 적용시 구동 스샷(반반??) [4] file 암흑마제 13305   2009-12-21 2009-12-21 18:35
 
125 Talk 튕기는 문제에 대해서 [6] Hide_D 13286   2009-11-26 2009-12-15 02:55
뭐 다들 아시다시피(?) 대부분의 문제는 보안툴이나 백신에 대해선 충돌하기 때문인데, 여태까지는 소극적으로 대응해왔는데 이젠 좀 적극적으로 뭐가 문제인지를 찾아봐야겠습니다. 해서 다음을 조사해서 보고서를 작성하는 프로그램을 만들어볼 예정입니다~ ...