본문 바로가기

쓰기

MFC를 그대로 써야하는지라
API용의 기본틀을 쓸순 없어서 새로 만들었는데,

extern "C" __declspec(dllexport) BOOL __stdcall OnPluginInit(HWND hSettingWnd, LPSTR cszSettingStringBuffer);
extern "C" __declspec(dllexport) BOOL __stdcall OnPluginOption();
extern "C" __declspec(dllexport) BOOL __stdcall OnPluginClose();
extern "C" __declspec(dllexport) BOOL __stdcall Translate(LPCSTR cszJapanese, LPSTR szKorean, int nBufSize);

이게 ezTransXP 플러그인 소스 헤더에서 함수 규격과 관련된 유일한 부분

그래서

extern "C" __declspec(dllexport) BOOL __stdcall OnPluginInit(HWND hSettingWnd, LPSTR cszSettingStringBuffer);
extern "C" __declspec(dllexport) BOOL __stdcall OnPluginOption();
extern "C" __declspec(dllexport) BOOL __stdcall OnPluginClose();
extern "C" __declspec(dllexport) BOOL __stdcall PreTranslate(LPCSTR cszInJapanese, LPSTR szOutJapanese, int nBufSize);
extern "C" __declspec(dllexport) BOOL __stdcall PostTranslate(LPCSTR cszInKorean, LPSTR szOutKorean, int nBufSize);
extern "C" __declspec(dllexport) const ATPLUGIN_VERSION * __stdcall OnPluginVersion();

요~렇게 대충 흉내를 내줬는데,
기본 함수가 로드 되지 않았다면서 안되더군요;;;

그래서
ATPlugin에서
#pragma comment(linker, "/EXPORT:OnPluginInit=_OnPluginInit@8")
#pragma comment(linker, "/EXPORT:OnPluginOption=_OnPluginOption@0")
#pragma comment(linker, "/EXPORT:OnPluginClose=_OnPluginClose@0")
#pragma comment(linker, "/EXPORT:OnPluginVersion=_OnPluginVersion@0")
#pragma comment(linker, "/EXPORT:PreTranslate=_PreTranslate@12")
#pragma comment(linker, "/EXPORT:PostTranslate=_PostTranslate@12")
이부분을 추가해 주니까 잘 되더라구요


저 아래쪽이 이지트랜스에는 없어도 돌아가는데,
새로 만든 녀석에는 왜 저게 있어야 돌앙가는거죠?
분류 :
Talk
조회 수 :
8374
등록일 :
2008.08.09
12:28:01
엮인글 :
https://arallab.hided.net/3593/d1a/trackback
게시글 주소 :
https://arallab.hided.net/board_devtalk/3593

whoami

2008.08.09
13:12:25

함수 익스포트에는 여러가지 방법이 있는데요, 그냥 __declspec(dllexport) 로 익스포트를 하면 함수 이름이 그냥 쓰여지지 않고 특정 법칙에 의거하여 쓰여집니다. 예를 들면 OnPluginInit 라는 함수는_OnPluginInit@8 이라는 이름으로 익스포트되지요.

그것을 OnPluginInit 라는 이름으로 고쳐주는 것이 저 #pragma comment 세트입니다. 사실 저것보다는 .def 파일을 통해 고쳐주는 것이 좀 더 일반화 된 방법인데요 (ezTransXP 플러그인 소스 내에 ezTransXP.def 파일을 참조하세요), 플러그인 프레임워크에서는 사용자가 원하는 방식의 플러그인을 만들기 위해 동적으로 익스포트할 필요가 있어 #pragma comment 방법을 쓰는 것입니다. .def 파일을 통한 방법은 고정되어 있기 때문에 반드시 적혀있는 모든 함수를 익스포트해야 하거든요.

참고링크.
DLL 에서 내보내기(익스포트) http://msdn.microsoft.com/ko-kr/library/z4zxe9k8(VS.80).aspx
데코레이팅된 이름 http://msdn.microsoft.com/ko-kr/library/56h2zst2(VS.80).aspx
링커 옵션 /EXPORT http://msdn.microsoft.com/ko-kr/library/7k30y2k5(VS.80).aspx

Hide_D

2008.08.09
13:37:46
ezTransXP.def가 있었군요[...]

Hide_D

2008.08.09
13:44:06
ezTransXP.def는 그냥 12345 해놨던데
그냥 막 정해도 되나요?
0은 안되는 것 같던데

whoami

2008.08.09
13:59:15

순서 (@1 같은) 말인가요? 상관 없습니다. 단지 Dependency Walker 같은 것으로 봤을 때 순서대로 하면 좀 더 예쁘다는 것 정도? ㅡ.ㅡ

농담이고요; 사실 번호로 함수 불러오기 할 게 아니면 번호는 신경 안 써도 됩니다.

List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜sort 최근 수정일
공지 Talk [필독] 테스트필터 사용시 주의사항 라파에 155440   2008-08-03 2008-12-16 00:03
149 Talk [아랄0.3] 후킹주소 추가하고 번역인자 선택시 오류인지 [3] 암흑마제 13263   2009-12-21 2009-12-21 23:22
아랄// 아랄님 ^^ 0.3 실행하여 0.2에서 찾은 코드로 적용을 할려고 하니 문제가 있는 듯 하네요 뭐냐면 후킹주소 넣고 번역인자 추가했을때 한 후킹주소에 번역인자가 2개가 있는 경우가 더러 있잖아요 그때 처음 인자 말고 두번째 인자는 무조건 아무것도 ...  
148 Talk 0.2 & 0.3 번역플러그 기호 출력문제 [1] file 류제로 16290   2009-12-21 2009-12-22 11:33
 
147 Talk 아랄 디버깅에서 전체문장이 나오고 다시 한글자로 나오는 경우에서요 [2] file 암흑마제 13666   2009-12-21 2009-12-22 23:37
 
146 Talk 0.3 atcode 플러그인. FrigateBird 14331   2009-12-22 2009-12-22 11:32
사용하면서 폰트셋 지정이 떨어져 나간 부분이 너무 횡하니 느껴지는데요. 그 부분에 코드 걸린것들을 표시하면 어떨까요. (별칭, 주소, 메모리 목록을.) 코드가 여러개 걸리면 그 조그마한 화살표로 왔다리 갔다리 하는것도 진절머리 납니다. ^^; 그리고 폰트...  
145 Archive [소스] ATPluginFrame 프레임워크 20091222 테스트 버전 [1] file whoami 17553   2009-12-22 2009-12-30 18:58
 
144 Talk 프로그램 종료시 OnObjectClose, OnPluginClose 가 불리지 않나요? [2] whoami 12736   2009-12-23 2009-12-23 22:27
ATPluginFrame 을 테스트중에 발견한건데, 후킹된 프로그램을 그냥 종료할 때 OnObjectClose 및 OnPluginClose 가 불리지 않는 것 같은 인상이 있군요? MessageBox 도 뜨지 않고 file 로 log 를 뽑아봐도 나오지 않는데.. 실제로 불리지만 프로그램이 종료되면...  
143 Talk ats파일에 아이콘을... [2] Hide_D 15493   2009-12-23 2009-12-23 14:27
역시 ats에 아이콘을 넣는 게 좋을 것 같습니다. 그래서 생각해본 방법 1. xml에 <icon></icon>항목을 추가해서 추가할 ico 파일을 변환해서 넣기 0xff -> 'FF' 식으로 하면 실제 ico 파일에 대해서 대략 용량이 2배가 되겠지만 '별 수 없죠' 2. ats에 대한 Ic...  
142 Talk 0.3 SVN 경로 수정했습니다! [2] Hide_D 15071   2009-12-23 2009-12-23 14:03
현재 아랄트랜스가 있는 서버에 SVN이 추가되어서 속도 향상을 목표로 SVN경로를 다음과 같이 변경했습니다. svn://aralgood.com/araltrans03/trunk revision은 몇가지 실수 빼곤 22개 리비젼 그대로 옮겨두었습니다. 다만 커밋 날짜가 달라지게 되므로 경로를...  
141 Talk [Skin] 0.3버전용 폴라리스 공식 스킨(한글)을 만드려고 합니다. [8] 아랄 16143   2009-12-23 2009-12-23 23:58
AralTrans 0.3 버전용 폴라리스 공식 스킨을 만드려고 합니다. 한글 기반이구요. 현재 Default 스킨을 어떻게 변화시키면 좋을지 의견 부탁드립니다.  
140 Talk 번역함수가 불렸을 때 자신이 불린 컨텍스트 이름을 아는 문제.. [8] whoami 15151   2009-12-24 2009-12-26 15:34
4. procTranslate 로 지정된 번역함수가 불렸을 때 자신이 어떤 컨텍스트로 불렸는지 아는 방법 현재 컨텍스트의 이름을 얻는 것 외에는 대부분 원하는게 가능할 것 같습니다. pObjectExtention 에 어떤 객체의 포인터를 넣어 놓고, procTranslate 가 호출되었...  
139 Talk XML 파싱 부분에 문제가 하나 있네요. Hide_D 15772   2009-12-30 2009-12-30 21:42
xml 태그에서 그 태그에 대한 내용이 없을경우 <tag></tag> 로도 표현할 수 있지만 <tag/> 로도 표현 가능합니다. 현재 파서 부분을 보니 <tag/>형식의 태그에는 대응이 되어 있지 않은것 같습니다.  
138 Talk [소스] ATPluginFrame 프레임워크 20100101 테스트 버전 file whoami 17564   2010-01-01 2010-01-01 16:59
 
137 Talk 0.3 Filter 간추려서 정리좀 해봤습니다. [1] file Hide_D 17301   2010-01-01 2010-01-02 05:08
 
136 Archive [소스] ATPluginFrame 프레임워크 20100105 테스트 버전 file whoami 17914   2010-01-05 2010-01-05 19:47
 
135 Talk 문자열의 길이를 반영하는 '필터' [4] Hide_D 15027   2010-01-19 2010-01-22 01:28
문자열 길이가 고정되어서 포인터 바꿔치기를 통해서도 길이가 바뀌지 않는 것들이 있는데, 이놈들을 위해 길이를 반영하는 필터가 있으면 좋을것 같습니다. 인자로 반영할 메모리 주소 1. 모듈(메모리 주소) 기반 2. 레지스터 기반 으로 ATCode의 그것과 비슷...  
134 Talk 문자열 길이에 대한 건의 file G2m 15608   2010-01-21 2010-01-21 18:44
 
133 Talk 뭐라고 설명해야할까요 -_-; 하여간 설명 file G2m 22598   2010-01-21 2010-01-21 19:17
 
132 Talk 어떤 정신나간 게임은 UTF-32를 쓰네요 -_-;; [1] Hide_D 19284   2010-01-30 2010-01-30 22:52
개발자가 미쳐서 Visual C++ 6.0에 iconv라도 섞어쓰는지 (아니면 gcc에 iconv... 던가) 내부 문자 처리를 UTF-32로 합니다 OTL  
131 Talk '잡담인데' [2] FrigateBird 23212   2010-02-22 2011-06-28 01:25
0.3에서 일부 게임이 코드를 잠시 none 해야 되는 녀석들이 있잖아염 코드를 잠시 슬쩍 어디 처 올리든 해서 단축키로 전환하면 좋겠는데  
130 Talk Hide_D's Todo List [1] Hide_D 19791   2010-03-01 2012-08-03 09:02
좀 써 놔야 할것 같습니다 -_-; 안써두니까 안해요 1. FixLine v2 패턴간 빈칸을 없애는 옵션을 추가 -> 아마 큰 패턴 단위로 옵션을 추가할 수 있도록 하는게 좋을 것 같다. 처리 순서 변경 -> 선 개행, 선 패턴, 번역, 후 패턴, 후 개행을 선 패턴, 선 개행,...