본문 바로가기

쓰기

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/5d9/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 [필독] 테스트필터 사용시 주의사항 라파에 2008-08-03 155440
184 Talk 히데님이 부탁하신거.... [1] file 류제로 2009-03-21 19458
183 Talk 1빠!!! [1] 아랄 2008-07-08 19435
182 Talk 어떤 정신나간 게임은 UTF-32를 쓰네요 -_-;; [1] Hide_D 2010-01-30 19284
181 Talk 기리기리 번역... [8] 나는누구인감? 2008-07-09 18994
180 Talk AppLoc.exe를 거치지 않고 AppLocale 가동시키는 법! Hide_D 2011-01-28 18684
179 Talk 위키 링크 레벨업! [테스트] [12] Hide_D 2009-12-17 18387
178 Talk FixLine '인수 추가' 창 새 디자인 [4] file Hide_D 2009-03-26 18340
177 Talk 쓸모가 있을것 같은 기능들 [4] Hide_D 2008-07-30 18225
176 Talk 6월 1일 2시 챗던 Talk Hide_D 2010-06-01 18098
175 Talk autorun.hta 파일 오류 스샷 입니다. [2] file 암흑마제 2009-12-20 18045
174 Talk 폰트함수인덧 아무개 2011-01-11 18005
173 Talk [소스] ATPluginFrame 프레임워크 20100101 테스트 버전 file whoami 2010-01-01 17564
172 Talk DenyWord + 정규표현식? Hide_D 2010-12-18 17305
171 Talk 0.3 Filter 간추려서 정리좀 해봤습니다. [1] file Hide_D 2010-01-01 17301
170 Talk AGTH의 /L과 AT의 /L [1] Hide_D 2008-07-08 17165
169 Talk RealLive 게임 목록 Hide_D 2008-07-10 16886
168 Talk [질문] J2kEngine.dll 에관해 이것저것 [3] 호기심맨 2008-09-29 16881
167 Talk ATCode에 @가 붙은 글꼴을 빼버려야겠군요 Hide_D 2010-12-11 16792
166 Talk 0.2 & 0.3 번역플러그 기호 출력문제 [1] file 류제로 2009-12-21 16290
165 Talk [Skin] 0.3버전용 폴라리스 공식 스킨(한글)을 만드려고 합니다. [8] 아랄 2009-12-23 16143