본문 바로가기

쓰기

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/494/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 [필독] 테스트필터 사용시 주의사항 라파에 155437   2008-08-03 2008-12-16 00:03
44 Talk ATCustom - 함수 Reference [47] Hide_D 103937   2010-07-20 2010-08-28 04:59
AralTrans의 Algorithm Plugin ATCustom의 함수 목록입니다. - 문서 상태 - 기본 함수 : 변경 중 변경 확률 보통 고급 함수 : 변경 중 변경 확률 높음 - 기본 함수 목록 - 핵심적인 기능을 가지거나 내부의 C++ 코드를 사용해야만 하는 함수의 목록입니다. 메...  
43 Talk ATCustom - 프로젝트 소개 [8] Hide_D 32701   2010-07-22 2011-07-14 11:21
- 소개 - ATCustom은 사용자가 직접 메모리 훅 및 메모리 작업을 할 수 있는 Script 기반 Algorithm 플러그인입니다. Google Chrome에 탑재된 v8 JavaScript Engine을 사용하여 JavaScript 파일을 파싱하여 동작하며, ATCustom에서 제공하는 API를 사용하여 작...  
42 Talk JSCustom의 초기 골격 코드를 SVN에 커밋했습니다. [1] Hide_D 33949   2010-09-18 2010-10-25 09:57
지금 안된 부분이.... 1. 고수준 함수, 고수준 보조 함수 구현 ( http://wiki.aralgood.com/index.php/JSCustom/FunctionReference ) 2. 아랄트랜스 0.3버전용 함수 구현 3. 아랄트랜스 플러그인 규격과 v8Wrapper 모듈의 연결 4. UI 정도네요. 올리긴 했지만 ...  
41 Talk [뻘글] 요새 프로텍터가 하도 무서워서 Hide_D 22878   2010-10-26 2010-10-26 00:15
대상 클라이언트에 최소한의 Injector만 '꽂아'두고 실제 동작은 '서버'에서 Injector와 IPC만으로 구동하는 형식은 어떨까 싶군요. Injector에서 '메모리' 입출력 관현 함수와 기본 WinAPI에 사용되는 DLL 로드(이건 위험하지 않으니까!)와 실제 WinAPI를 실...  
40 Talk KiriKiri 텍스트 파싱 개선 프로젝트! Hide_D 22403   2010-10-28 2010-10-28 00:21
필요가 생겨서[!] 이제 좀 개선을 시켜볼 생각입니다. 우선 문제가 되는 곳은 text=""겠군요  
39 Talk ATCode에 @가 붙은 글꼴을 빼버려야겠군요 Hide_D 16792   2010-12-11 2010-12-11 16:28
질문 게시판에 백년 만년 올라오는 왜 글자가 옆으로 누워있죠? 를 막으려면 역시 @붙은 글꼴은 빼는게 제격입니다 ㅠ 대신 아래에 체크로 @ 허용 같은거 하나 만들어두고요  
38 Talk DenyWord + 정규표현식? Hide_D 17305   2010-12-18 2010-12-18 00:05
어차피 문자열을 찾는 구조였으니 그냥 Boost꺼나 C++0x의 STL에 달려있는 정규표현식 모듈 들고와서 Deny, Allow, Exact에다 정규 표현식도 합쳐볼까요?  
37 Talk 웹 계정 아이디/비밀번호 secret Hide_D 1   2011-01-02 2011-01-02 16:21
비밀글입니다.  
36 Talk 폰트함수인덧 아무개 18005   2011-01-11 2011-01-11 23:38
CreateFontIndirect_Correct 누가 후킹 하나열[...........]  
35 Talk 작전명. '누덕누덕' 작전 시작 Hide_D 10674   2011-02-18 2011-02-18 00:02
AralTrans 0.2에서 시작해서 눈꼽만큼씩 고쳐나갈 생각입니다. 주 타겟 OS : Windows 7 32bit 목표 일자 : 2012년 오기 전 PS : JSCustom 프로젝트는 연기되었습니다.  
34 Talk Windows 7, UAC, 64bit Hide_D 9107   2011-04-24 2011-06-28 01:25
사실상 요새 구입하는 '최신형' 컴퓨터들이 갖는 세팅이 Windows 7 64bit에다가 UAC를 기본값으로 두고 사용하는 방식인데, 기존 아랄트랜스가 여기에 대응하지 못하는 부분이 많습니다. Windows 7 - 사실 이게 제일 속편합니다. 이거 자체로는 문제되는 부분...  
33 Talk AppLoc.exe를 거치지 않고 AppLocale 가동시키는 법! Hide_D 18684   2011-01-28 2011-01-28 01:54
환경 변수 두개를 다음과 같이 세팅합니다. set __COMPAT_LAYER=#APPLICATIONLOCALE set AppLocaleID=411 그리고 나서 원하는 프로그램을 돌리면 자동으로 AlLayer.dll이 인젝션 됩니다.  
32 Talk AT 0.3 재설계 프로젝트 [1] 아랄 10551   2011-04-16 2011-04-17 09:52
1. 인젝터-서버 방식 2. IDE = vs2010 3. AT 0.3에서 시도하려 했던 중복 기능의 모듈화는 유효, 모듈 명명은 언제든 변할 수 있음 FontMapper, UITrans 4. 스크립트 엔진 = v8 5. 각 플러그인은 운용중인 파일을 반환하는 인터페이스를 가져야 함 6. Launcher...  
31 Talk 컨텍스트 구조 제안(핸들러 구조) [4] Hide_D 8336   2011-04-21 2011-04-23 20:17
가령 모듈 3가지가 DumpText, FixLine, EzTransXP 요렇게 있다고 가정할때 var c0_EzTransXP = new EzTransXP("NoSpace"); var c0_DumpText = new DumpText("KOut,KHex,KHex16"); var c0_FixLine = new FixLine("/ATData/c0.dat"); c0_DumpText.setNext(c0_EzT...  
30 Talk AralTrans 20120214 버전 변경점 [6] whoami 4193   2012-02-14 2012-06-17 14:29
아랄트랜스 20120214 버전에서의 변경점 1. ATCTNR.dll 버그 수정 - 모듈 정보에서 이미지 파일 크기가 부정확할 경우 Access Violation 에러가 나는 문제 해결. Rewrite (Key) 에서 작동 확인. 다른 게임은 미확인이나 피시님의 ATCTNR 패치가 거의 동일하기 ...  
29 Talk CustomDic의 동작 방식에 대해서 secret Hide_D 4   2012-02-14 2012-02-14 13:36
비밀글입니다.  
28 Talk SMSTR 의 부가옵션에 대한 토론.. [4] whoami 3800   2012-02-14 2012-07-12 19:27
ATCode 테스트버전 120207 의 댓글이 너무 복잡하게 꼬여서 이쪽으로 뺍니다. 현재 120207 에서 SMSTR 은 기본적으로 피시님 버전의 OVERWRITE(IGNORE,BUFCHANGE) 모드로만 돌아가도록 만들어져 있습니다. 그런데 피시님께서 부가기능이 필요하시다고 하셨는데...  
27 Talk FrigateBird님의 ATCode 20111003버전에 대하여.. [9] whoami 4957   2011-11-02 2011-12-10 16:16
일단 FrigateBird(잘 알려진 피시로 호칭)님의 ATCode 20111003 (줄여서 1003버전) 을 한번 훑어보았는데요, 1003 버전의 주된 변경점은 Siglus 엔진에 대한 지원이 주를 이루고 있습니다. 물론 기존 ATCode 의 버그를 잡은 것도 있지만 마이너하니 넘어갑니다...  
26 Talk AralTrans, ATCTNR 111112 버전 SVN에 추가. [1] whoami 5260   2011-11-12 2012-06-17 14:29
ATCTNR 의 SVN 소스가 후킹모드 2로 되어있었는데.. 아마 예전에 지나가다정착한이A 님이 발안해서 테스트하던 후킹모드 2 판의 소스가 올라가있었던 듯 합니다. 뭐.. 실제 머리싸매고 고민하다 보니 의외로 돌려놓기가 어렵지 않아서 후킹모드 1로 돌려놓고 ...  
25 Talk ATCode 새로운 기능 추가. [5] EroGame 2518   2012-04-01 2012-04-03 19:19
제가 시간만 된다면 약간의 데모스럽게 소스라도 올려드리는데.. 좀 여의치 않군요. 일단 생각한 방안입니다. 예전부터 필요한 기능이라 생각했는데 이래저래 고민 끝에 해결방안이 나왔습니다. 현재 ATCode의 후킹 방식은 한 함수 내에 후킹 지점부터 리턴 포...