본문 바로가기

쓰기

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/b77/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 [필독] 테스트필터 사용시 주의사항 라파에 155439   2008-08-03 2008-12-16 00:03
309 Talk 번역 모듈로 인터넷을 이용하는 방법. Hide_D 30170   2010-06-04 2010-06-04 23:54
굳이 번역기를 이지트랜스를 쓰지 않아도 아랄트랜스를 사용하는 방법이 필요합니다. 네이버 번역 등을 인터넷으로 접근해서 쓰는 방법으로 번역 모듈을 만들어 보겠습니다.  
308 Talk 6월 1일 2시 챗던 Talk Hide_D 18098   2010-06-01 2010-06-01 02:34
대화 인물 : Hide_D, Rynie, G2m, 프시쵸 대화 주제 : 0.3 [ActiveX, ATS] Hide_D 본인이 직접 뜯어본것이 아니므로 사실과 다를 수 있습니다. Hide_D: 아 0.3 자체는 괜찮아요 Hide_D: 다만... G2m: ㅇㅇ Hide_D: 1. ActiveX Hide_D: 2. ATS Hide_D: 이 두놈...  
307 OtherFiles EncodeKor(한국어 <-> 일본어 문자 코드 대치) 재 작성 프로젝트! [16] file Hide_D 75319   2010-05-29 2010-10-25 09:55
 
306 OtherFiles [프로그램, 소스] AT 환경 수집기 20100526 [1] file Hide_D 30118   2010-05-26 2016-05-28 15:42
 
305 Talk 0.3님 제발 자비좀[.....] file 아무개 31299   2010-05-23 2010-05-23 06:20
 
304 Talk ATS의 문제점.. Hide_D 23578   2010-05-15 2010-05-15 19:18
0.2의 그 복잡하고 어려운 방식은 일단 뒤로 두고 0.3의 ATS가 갖는 허점이 1. 첨부파일, 필터 경로들을 [일일히!] 입력해야 한다. 2. 코드가 갱신되었을 때 대처할 방법이 전혀 없다. 일일히 입력하는 것 자체는 나쁘지 않은데, 2번 때문에 심각한 문제가 됩...  
303 Talk 0.3님 제발 자비좀[.....] [2] G2m 29951   2010-05-05 2010-05-23 06:21
디에스 이레 뚫으면서 알게된건데 일단 히데찌 말로는 관리자씨가 말하길 0.3 유니코드 완벽이염 ㅇㅇ 라고는 하는데 그 뭐랄까 문장 스크립트 형식이 00 30으로 시작하는 놈은 아랄이가 고대로 씹어 드셔서[............] 이걸 픽스로 잡아도 조트망이고 흠. ...  
302 Talk FixLine 버그 발생 [1] Hide_D 23382   2010-04-25 2010-05-01 22:19
!梨桜 01 21 979C 8DF7 을 처리하기 위해 %01%21{T} 로 설정하면 FixLine이 씹고 다음 데이터를 뱉지 않음 %21{T} 로 설정하면 아예 '닥치고 튕김' 지정된 문자열 + 임의의 문자열 구조로 했을때 버그가 있는듯 최대한 빨리 수리를 -_-;  
301 Talk 아랄3 디버깅이 말이죠... [2] file JKLeetro 35689   2010-04-20 2010-10-20 07:18
 
300 Talk Hide_D's Todo List [1] Hide_D 19791   2010-03-01 2012-08-03 09:02
좀 써 놔야 할것 같습니다 -_-; 안써두니까 안해요 1. FixLine v2 패턴간 빈칸을 없애는 옵션을 추가 -> 아마 큰 패턴 단위로 옵션을 추가할 수 있도록 하는게 좋을 것 같다. 처리 순서 변경 -> 선 개행, 선 패턴, 번역, 후 패턴, 후 개행을 선 패턴, 선 개행,...  
299 Talk '잡담인데' [2] FrigateBird 23212   2010-02-22 2011-06-28 01:25
0.3에서 일부 게임이 코드를 잠시 none 해야 되는 녀석들이 있잖아염 코드를 잠시 슬쩍 어디 처 올리든 해서 단축키로 전환하면 좋겠는데  
298 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  
297 Talk 뭐라고 설명해야할까요 -_-; 하여간 설명 file G2m 22598   2010-01-21 2010-01-21 19:17
 
296 Talk 문자열 길이에 대한 건의 file G2m 15608   2010-01-21 2010-01-21 18:44
 
295 Talk 문자열의 길이를 반영하는 '필터' [4] Hide_D 15027   2010-01-19 2010-01-22 01:28
문자열 길이가 고정되어서 포인터 바꿔치기를 통해서도 길이가 바뀌지 않는 것들이 있는데, 이놈들을 위해 길이를 반영하는 필터가 있으면 좋을것 같습니다. 인자로 반영할 메모리 주소 1. 모듈(메모리 주소) 기반 2. 레지스터 기반 으로 ATCode의 그것과 비슷...  
294 Archive [소스] ATPluginFrame 프레임워크 20100105 테스트 버전 file whoami 17914   2010-01-05 2010-01-05 19:47
 
293 Talk 0.3 Filter 간추려서 정리좀 해봤습니다. [1] file Hide_D 17301   2010-01-01 2010-01-02 05:08
 
292 Talk [소스] ATPluginFrame 프레임워크 20100101 테스트 버전 file whoami 17564   2010-01-01 2010-01-01 16:59
 
291 Talk XML 파싱 부분에 문제가 하나 있네요. Hide_D 15772   2009-12-30 2009-12-30 21:42
xml 태그에서 그 태그에 대한 내용이 없을경우 <tag></tag> 로도 표현할 수 있지만 <tag/> 로도 표현 가능합니다. 현재 파서 부분을 보니 <tag/>형식의 태그에는 대응이 되어 있지 않은것 같습니다.  
290 Talk 번역함수가 불렸을 때 자신이 불린 컨텍스트 이름을 아는 문제.. [8] whoami 15151   2009-12-24 2009-12-26 15:34
4. procTranslate 로 지정된 번역함수가 불렸을 때 자신이 어떤 컨텍스트로 불렸는지 아는 방법 현재 컨텍스트의 이름을 얻는 것 외에는 대부분 원하는게 가능할 것 같습니다. pObjectExtention 에 어떤 객체의 포인터를 넣어 놓고, procTranslate 가 호출되었...