『MFC 프로그래머 동호회-질문과 답변 (go MFCPRO)』 16664번
제  목:[답변] DLL 클래스 만들때...                                
올린이:neri    (조경민  )    99/09/21 19:29    읽음:  0 E[7m관련자료 있음(TL)E[0m
-----------------------------------------------------------------------------


겨우 알아 냈네요....

템플릿트를 씀에 있어서의 특성을 깜빡했었어여

템플릿트는 실제 코드가 아니라 그때 그때 컴파일 타임시 실 코드가

생산되잖아요

다음은 전에 제가 읽은 어떤 일본놈 -,.-이 쓴 책에 나온건데...

템플리트로 쓰여진 범용 함수 어셈 코드

templete <class T>
T abs(T num){return num < 0 ? -num;num;};

;자동으로 만들어진 함수들
@abs$qzc proc near
@abs$qi proc near
@abs$ql proc near
@abs$qf proc near
@abs$qd proc near
--------------------------------------

당시의 컴파일러는 자동으로 컴파일 타임시 위와 같은 기계어

코드를 생성하던데.. 하여간.. 원하는 자료형에 대해서 기계어

코드를 생산하는 템플리트라서..

이미 템플릿코드를 DLL이나 LIB로 (또는 OBJ)로 만들면

전혀 만들어진 타입에 대한 코드가 없어서 링크 에러가 났던거

같아요 -___-;

MSDN에 힘들게 찾아보니.. 다음 과 같은 글이 있더군요

Explicit Instantiation
Explicit instantiation lets you create an instantiation of a templated class o
r function without actually using it in your code. Since this is useful when y
ou are creating library (.LIB) files that use templates for distribution, unin
stantiated template definitions are not put into object (.OBJ) files.

The following explicitly instantiates MyStack for int variables and six items:

template class MyStack<int, 6>;

그니까 -_-;;; 지 아무리 템플릿트라고 해도.. LIB만들기 전에

미리 쓰려는 --;;; 타입에 대한 익스플릿 인스탄티션(발음맞나;;)을

정해 주어야 기계어 코드 DLL또는 LIB 로 만들때 실 코드가 들어간다는

거네요 -__________________-; 이런 우숩지도 않은 지경이..

어쨋든.... (정석인지 아닌지는 모르지만)

template <class T>
class __declspec(dllexport) temcls{
         :
};
template class temcls<int>; <- 타입초기화 명시 -__-;
template class temcls<char>;

로 해놓고 DLL로 만들면

쓸때는 --;;

temcls<int> a;
temcls<char> b;

위의 두개는 이미 코드로 되어 있어서 실행은 되지만

temcls<double> c; 로 하면..

unresulved link Error가 뜨는 것인가 봐요 ;;

ㅠㅠ;... 어쨋든... 문제를 해결했는데.. 한 쪽 구석이 이리도

안타까운것은. 왜일까.. 꾸벅.. 좋은 하루 되세요..

『MFC 프로그래머 동호회-질문과 답변 (go MFCPRO)』 16666번
제  목:[기타] DLL 클래스 만들때..                                  
올린이:neri    (조경민  )    99/09/21 19:44    읽음:  0 E[7m관련자료 있음(TL)E[0m
-----------------------------------------------------------------------------


방금 생각난건데요!!! 어쩐지 그런거 같아요!!

MFC 소스에 보면여

Array_o.cpp <- CObArray에 관한 클래스 소스
Array_w.cpp <- CWordArray에 관한 클래스 소스
Array_s.cpp <- CStringArray에 관한 클래스 소스

이렇게 cpp로 dll안으로 들어가는데여

소스/include/afxtempl.h <- 템플릿트 클래스들에 대한 해더

여 안에는 CArray와 CList CMap 클래스들이 있는데..

이것들은 이상하게도 소스도 헤더에 포함이 되어 있어요

그래요! 바로 그런거 였어여!! 소스까정 헤더에 넣어서

헤더가 포함되면서 같이 개발자가 컴파일할때 템플릿트 코드 생성

기능을 컴파일타임시 계속 하고 있었던 거예요...

( 그럴꺼라는 생각 임..;; --;)

어쩐지.. STL도 죄다 헤더 파일만 보이더마... -___-

그런 깊은 뜻이... 하지만.. 왠지 허접해 보인다 --;

어쨋든.. 이건 그냥 내 생각이고( 그렇게 생각되어여..)

그럼 꾸벅...

좋은 하루 되세요...

'KB > MFC/Win32' 카테고리의 다른 글

CWinThread 간단 사용  (0) 2004.03.19
hook 설명  (0) 2004.03.19
템플리트 in DLL  (0) 2004.03.19
간단 콘솔제어  (0) 2004.03.19
여러컨트롤의 포커스를 바꾸는 방법  (0) 2004.03.19

+ Recent posts