본문 바로가기

쓰기

안녕하세요, whoami입니다.

20080726 에서의 변경점은 옵션에 한글이 들어올 때의 문제점 수정밖에 없습니다.
Util 모듈하고 tstring 모듈만 변경되었습니다.

관리자님이 올려주신 플러그인 소스는 유용하긴 한데 처음부터 만들려면 막막해지죠. 그래서
플러그인 개발하기 위해 플러그인 사양에 맞게 처음부터 만들 필요가 없게 기본바탕이 되는 프레임을
구성해보았습니다. 이 상태에서 ATPlugin.h 의 define 부분만 바꿔서 그대로 컴파일해도 작동되는
플러그인을 만들 수 있습니다 (단, 아무일도 하지 않습니다.. 당연하겠지만서도;)

이 소스는 Public Domain, 곧 저작권 없는 소스입니다. 프레임워크이니까 당연하겠죠? ^^

다운로드는.. ATPluginFrame_20080810.zip



아래는 ReadMe.txt 의 내용입니다.
-----------------------------------------------------------------------------------------------------------------
아랄 트랜스 플러그인 개발 프레임워크 20080810 for AralTrans 0.2.20080704

* 파일 설명
 ATPlugin.h - 아랄트랜스 플러그인 규격에 맞는 익스포트 정보.
 ATPlugin.cpp - 아랄트랜스 플러그인이 제공해야 하는 실제 함수 모음
 DefATContainer.h - 아랄트랜스 컨테이너가 제공하는 함수의 원형 (ATCode 플러그인에서 슬쩍 ^^)
 ATCApi.h / ATCApi.cpp - 아랄트랜스 컨테이너 제공 함수를 사용하기 쉽게 Wrapping한 클래스
 tstring.h / tstring.cpp - 유니코드용 변환 함수 및 string 지원 모듈
 Util.h / Util.cpp - 플러그인 제작시 유용한 유틸리티 함수 모음
 resource.h / ATPlugin.rc - 플러그인 버전 표시 리소스
 ATPlugin.dsw / ATPlugin.dsp - Visual C++ 6.0 용 프로젝트 파일


* 후킹 플러그인을 만들 때
 ATPlugin.h 의 #define ATPLUGIN_HOOKER 를 주석 해제하시고 개발하세요.


* 번역 플러그인을 만들 때
 ATPlugin.h 의 #define ATPLUGIN_TRANSLATOR 를 주석 해제하시고 개발하세요.


* 필터 플러그인을 만들 때
 ATPlugin.h 의 #define ATPLUGIN_FILTER 를 주석 해제하시고 개발하세요.


* ATPLUGIN_VERSION 과 OnPluginVersion()
 0.2.20080518 공식 플러그인 규격은 아니지만 이후 플러그인 사양이 변했을 때 아랄트랜스
 제작자께서 참조 가능하도록 추가했습니다;

 (20080726 추가 - AralUpdater 가 플러그인의 버전 정보 리소스를 기본으로 업데이트한다는 것을
  알아냈으므로 OnPluginVersion()은 필요없을 것 같습니다만.. 일단 남겨둡니다.
  추가로.. 기본적으로 플러그인의 버전 정보 리소스를 추가하도록 ATPlugin.rc 를 동봉하였으니
  이 파일의 버전 리소스를 고쳐 사용하도록 하시기 바랍니다)


* ATCApi 사용하기 위한 준비
 1. ATCApi.h 를 include 하면 전역 객체로 g_cATCApi가 잡힙니다.
 2. g_cATCApi의 IsValid() 가 TRUE 이면 사용 가능.


* 유니코드 기반 프로젝트를 만들 때
 Visual C++ 6.0 설정의 컴파일러 옵션 define 중 _MBCS 를 지우고 UNICODE, _UNICODE 를 대신 넣으면 됩니다.
 동봉된 프로젝트 파일에는 유니코드용/MBCS용의 설정이 둘 다 있습니다.
 다른 버전의 컴파일러 사용시에는 각 버전의 유니코드 설정 방법을 참고하세요.


* tstring 모듈의 함수 간단 설명
 tstring - 유니코드 설정에 따라 string 혹은 wstring 으로 동작합니다.
 tstring MakeTString(const char *pszString) - char 형식의 문자열을 tstring 으로 바꿔줍니다.
 TCHAR MakeTChar(const char ch) - char 형식의 문자를 TCHAR 로 바꿔줍니다.. 실제로는 필요없을지도;
 MyWideCharToMultiByte() - WideCharToMultiByte 대용 함수입니다. 어플로케일때문에 이렇게 사용해야 한다고..
 MyMultiByteToWideChar() - MyMultiByteToWideChar 대용 함수입니다. 어플로케일때문에 이렇게 사용해야 한다고..
 Kor2Wide(LPCSTR lpKor, LPWSTR lpWide, int nWideSize) - 한글일 경우 MyMultiByteToWideChar를 쉽게 쓰기 위한 간략함수입니다.
 Wide2Kor(LPCWSTR lpWide, LPSTR lpKor, int nKorSize) - 한글일 경우 MyWideCharToMultiByte를 쉽게 쓰기 위한 간략함수입니다.


* Util 함수 간단 설명
 const char *GetATDirectory()
 - 아랄트랜스 설치 디렉토리를 알아온다.
 void GetATOptionsFromOptionString(const char *pszOption, ATOPTION_ARRAY &aOptions)
 - 간단한 옵션 파서. 옵션은 key1(value1),key2(value2) 형식 혹은 key1,key2 도 가능.
 void GetOptionStringFromATOptions(const ATOPTION_ARRAY &aOptions, char *pszOption, int nMaxOptionLength)
 - 위의 옵션 파서와 반대로 옵션 모음을 옵션 문자열로 바꿔주는 함수.

List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜 최근 수정일
공지 [SVN] AralTrans 0.3 - All Plugins [6] 아랄 10340   2009-10-23 2011-10-19 00:01
공지 [SVN] AralTrans 0.2 - Full Source [2] 아랄 16054   2008-07-22 2010-10-31 01:18
12 AralTrans v0.3 Renewal Project [1] file 아랄 5901   2011-04-17 2011-04-17 18:42
 
11 [0.2] OnPluginInit에서 MessageBox 출력시 주의! Hide_D 6809   2009-12-11 2010-06-30 16:54
이전 이슈에서도 다룬적이 있습니다만. 플러그인이 로드된 시점에서 이 플러그인의 부모 객체(즉 게임)가 제대로 로드 되지 않았을 수 있으므로, Init단에서 에러 등의 이유로 MessageBox를 사용할 경우 부모 객체를 NULL로 주더라도 Sleep(2000); 과 같이 지...  
10 STL iterator 사용시 주의사항 [1] 아랄 7553   2009-10-04 2010-06-30 16:54
<발생한 문제> map 에서 erase 호출 시 잘못된 메모리 참조가 발생. <원인> stl container의 iterator들은 링크드 리스트로 관리되고 있는데, 이들은 함수나 블럭의 시작/종료 시점에서 constructor/destructor 가 자동으로 호출된다. 하지만 goto문이나 inlin...  
9 한 함수에 후킹 포인트를 2개 이상 잡을 수 없습니다. [3] Hide_D 7695   2009-07-20 2010-06-30 16:54
적는 것을 깜빡 하고 있었는데, ATCode나 기타 방법들을 사용할 때, 한 함수 내에서 후킹 포인트는 단 하나만 잡아야 합니다. 아랄트랜스 0.2에서는 후킹과 동시에 실행파일 원본과 그 원본의 복사본을 준비해 놓고 원본의 후킹포인트를 jmp를 사용해서 번역 ...  
8 [부정확] 플러그인에 쓰레드를 사용할때 [2] Hide_D 7450   2009-01-07 2010-06-30 16:54
제 추측이지만, 아랄트랜스의 플러그인 로드 시간은 (게임의) 프로세스 동작 -> 플러그인 로드 -> (게임의) 윈도우 생성 으로 매우 빠른것으로 보이며, 플러그인의 종료 시간은 (게임의) 윈도우 파괴 -> 플러그인 종료(?) -> (게임의) 프로세스 파괴 로, 윈도...  
7 아랄 컨테이너 창이 hidden상태일 수 있으므로 MessageBox 주의! [2] 아랄 7256   2008-11-07 2010-06-30 16:54
플러그인 인자로 넘겨주는 아랄 컨테이너 창의 핸들. 기본 설정이 트레이로 실행되게끔 되어 있을 시 아랄 컨테이너 창은 화면에 보이지 않는다. 그런데도 아랄 컨테이너 창의 핸들을 부모로 삼아 메세지 창 같은 것을 띄우게 되면 절대 보이지 않으며 게임은...  
6 파일 다이얼로그를 띄운 후 작업폴더가 바뀌는 현상 [3] 아랄 7766   2008-10-28 2010-06-30 16:54
바로가기 생성을 위해 파일 다이얼로그 박스를 띄웠더니 그 후 작업 디렉토리가 바뀌는 현상 발생. 파일 다이얼로그를 띄우기 전/후 안전을 위해 다음의 코드를 추가. // 현재 프로세스의 작업 디렉토리 저장 CString strWorkDir; ::GetCurrentDirectory(MAX_...  
» [소스] 플러그인 개발을 위한 기본 프레임워크 20080810 file whoami 8610   2008-08-10 2010-06-30 16:54
안녕하세요, whoami입니다. 20080726 에서의 변경점은 옵션에 한글이 들어올 때의 문제점 수정밖에 없습니다. Util 모듈하고 tstring 모듈만 변경되었습니다. 관리자님이 올려주신 플러그인 소스는 유용하긴 한데 처음부터 만들려면 막막해지죠. 그래서 플러그...  
4 [문서] MultiPlugin 2 - 필터 플러그인 규격 file whoami 9376   2008-07-26 2010-06-30 16:54
 
3 [개발환경구축] AralTrans 프로젝트 소스 다운받기 [3] file 아랄 8165   2008-07-24 2010-06-30 16:54
 
2 [개발환경구축] TortoiseSVN 설치하기 file 아랄 7703   2008-07-24 2010-06-30 16:54
 
1 [문서] 아랄트랜스 0.2 - 플러그인 규격 [5] file 아랄 9922   2008-06-22 2010-06-30 16:54