본문 바로가기

쓰기

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/4a1/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
289 Talk [질문]번역플러그인에서 필터후처리로 넘어갈때.. [1] 호기 13282   2009-12-19 2009-12-19 03:08
우선 0.3 출시 축하드리고요...^^마침 전국란스 깔려 있어서 테스트 해보았는데... 음 실행 파일 해시가 안맞는다고 나오네요.. 머 이거야 제가 호환되는 버전의 전국란스를 다시 설치하거나 혹은... 이 실행파일 버전을... 추가등록시켜주시던가 하면 될거 같...  
288 Talk [아랄0.3] 후킹주소 추가하고 번역인자 선택시 오류인지 [3] 암흑마제 13263   2009-12-21 2009-12-21 23:22
아랄// 아랄님 ^^ 0.3 실행하여 0.2에서 찾은 코드로 적용을 할려고 하니 문제가 있는 듯 하네요 뭐냐면 후킹주소 넣고 번역인자 추가했을때 한 후킹주소에 번역인자가 2개가 있는 경우가 더러 있잖아요 그때 처음 인자 말고 두번째 인자는 무조건 아무것도 ...  
287 Talk QuickTrans2 자료 백업 file Hide_D 13246   2009-08-26 2009-08-26 02:53
 
286 Archive [플러그인] FixLine 테스트버전 081230 [4] file Hide_D 13238   2008-12-30 2008-12-31 00:39
 
285 Talk [소스] ConsoleTrans + 질문 [1] file Hide_D 13002   2009-08-11 2009-08-12 23:34
 
284 Archive [플러그인,소스] KoFilter 테스트 버전 20081119 file whoami 12902   2008-11-19 2009-01-06 01:10
 
283 Talk 정음 글로벌 2005에 내장된 번역기 [5] Hide_D 12901   2008-11-09 2008-11-09 15:24
ezTransXP보다 좀더 좋아보이네요. 특히 구어표현이 훨씬 낫네요 단순 후커사전 제보 문장들 중에 절반은 수정이 필요없을정도  
282 Archive ATPluginFrame 프레임워크 20090901 테스트 버전.. file whoami 12897   2009-09-01 2009-09-01 22:49
 
281 Talk 아나 ㅅㅂ VS2008 안쓸랍니다. [5] Hide_D 12867   2009-04-02 2009-04-03 21:16
제컴이 ㅄ인지 설치할때 ㅄ이 된건진 잘 모르겠는데, 쓰기 갑갑해 미치겠습니다ㅣ -_-; Visual Studio 2008 SP1입니다. 자주 발생하는 현상이 예를 들어 int j=0; for(int i=0;i<28;i++) { j+=i; } for(int i=0;i<28;i++) { j+=i; } _wsprintf(L"%d",j); 요런 ...  
280 Talk FixLine v2 길이제한 '원문 길이' 버그 Hide_D 12853   2009-07-27 2009-07-27 23:05
긴경우는 잘 동작합니다만, 원문 보다 짧은경우에는 그냥 짧은 상태로 유지가 되어서 덮어쓰기 사용시 몇가지 문제가 발생했습니다. 이건은 조만간 빈칸을 채우던가 해서 해결해야겠습니다. + 이 기능은 CmdFilter의 '원문 덮어쓰기'와 같은 기능입니다.  
279 Talk 아무나 rc 파일 좀 만들어 주실분 안계세요? [2] Hide_D 12831   2008-07-19 2008-07-19 22:41
대충 이렇게 생겨먹었습니다. ┌──────────────────────┐│                      ││ □사용자사전사용             ││  경로 - ○ 게임폴더ATDataCustomDic.txt ││      ○ 사용자정의 |       |...|││    ...  
278 Talk [오류보고]ATcode 버퍼크기 무시 버그 [1] file HaruKaze 12813   2008-12-18 2009-01-06 00:56
 
277 Talk 한글 조사 처리 [1] Hide_D 12783   2009-05-23 2009-07-08 22:03
기본적으로 맨 마지막 글자를 보고 받침이 붙느냐 안붙느냐를 처리하게 되는데, 일단 쓰여있는 방법은 http://winp.egloos.com/1917711 http://ttongfly.net/zbxe/?document_srl=45333 걍 맨 뒷글자를 일일히 확인하는 방법이다. 그런데 뒤에 있는 문서의 글자...  
276 Talk INNODB 테스트 Hide_D 12769   2009-12-09 2009-12-09 17:01
속도 향상을 위해 INNODB로 바꿔봅니다. 테스트 개시  
275 Talk 프로그램 종료시 OnObjectClose, OnPluginClose 가 불리지 않나요? [2] whoami 12736   2009-12-23 2009-12-23 22:27
ATPluginFrame 을 테스트중에 발견한건데, 후킹된 프로그램을 그냥 종료할 때 OnObjectClose 및 OnPluginClose 가 불리지 않는 것 같은 인상이 있군요? MessageBox 도 뜨지 않고 file 로 log 를 뽑아봐도 나오지 않는데.. 실제로 불리지만 프로그램이 종료되면...  
274 Archive [플러그인] ATCode 테스트 버전 20081203 (log 없는 버전) file whoami 12734   2008-12-05 2008-12-05 23:06
 
273 Talk [질문] 번역플러그인에 관해... [2] 호기심맨 12729   2009-01-06 2009-01-06 09:12
Aral을 하다보면 한번 번역된 문장은 다시 번역하지 않고 예전에 번역된 결과값을 다시 쓰잖아요.... 궁금한건 이부분을 Aral본체가 하는것인지.... 아니면... 번역플러그인이 해주는 것인지이거든요.. 그러니까 번역플러그인을 만들려면.... 저 처리를 번역플...  
272 OtherFiles vs2008 - Remote Debugging file 아랄 12710   2008-10-13 2008-10-13 23:55
 
271 Archive [플러그인, 소스] CmdFilter 테스트 버전 20080807_2 file whoami 12660   2008-08-07 2009-01-06 01:26
 
270 Archive [플러그인, 소스] CmdFilter 테스트 버전 20080715 file whoami 12650   2008-07-15 2009-01-06 01:00