MFC에서 리플렉션 기능 구현 시 문자열만으로 클래스 생성하는 방법에 대해서 질문 드립니다.
안녕하세요.
이거 하나 때문에 3주째 해결을 못하고 있어서 이렇게 질문을 드립니다.ㅠㅠ
제가 현재 구현하고자 하는 기능입니다.
2가지 통신 방법에 대해서 사용자가 선택할 수 있게끔 Com1 class, Com2 class를 만들었습니다.
두개 모두 동일하게 Com이라는 클래스로부터 상속을 받았구요.
어떤 통신 방법을 사용할지는 XML에 저장되어있습니다.
그리고 XML을 읽어들여 XML 노드의 이름이 Com1 이라고하면 Com1 클래스의 객체를 생성하고
XML 노드의 이름이 Com2이라고 하면 Com2 클래스의 객체를 생성하고자 합니다.
즉, 둘 중 하나만 선택이 되며 Com1 이 될지 Com2가 될지 모르기 때문에 CRuntime Class를 사용하려고 한 것입니다.
우선 Com1, Com2 클래스에는 DECLARE_DYNCREATE를 이용하였고
메인에서
CRuntimeClass* pRuntime = RUNTIME_CLASS(Com1);
Com* pCom = (Com*)pRuntime->CreateObject();
이렇게 해주니 객체가 생성이 되더라구요.
그런데 제가 필요한건 단순히 문자열 "Com1", "Com2"를 이용해서만 객체를 생성하려고 하는데
CreateObject 함수에 문자열 "Com1"을 넣어줘도 정상적으로 객체가 생기질 않습니다.
많은 예제를 보아도 문자열로 CreateObject("Com1") / CreateObject("Com2") 이렇게 사용한 예제는
하나도 없고 전부 RUNTIME_CLASS(Com1) / RUNTIME_CLASS(Com2) 이런식으로 하드코딩으로 입력하게끔
되어있습니다.
애초에 리플렉션이 어떤 클래스가 생길지 모르기 때문에 동적으로 생성하기 위한 기능으로 알고 있는데
하드 코딩으로 RUNTIME_CLASS(Com1) 이런식으로 코드에 입력할거면 if문이나 다른 방법으로 쓰지 애써
리플렉션 기능으로 왜 쓰는건지 이해가 되질 않습니다.
정리하자면
- 클래스명을 문자열로 알고 있다.
- 클래스명을 가지고 CRuntime class를 이용해서 객체를 생성하려 한다.
입니다.
바쁘신 와중에 수고스럽겠지만 제발 자그마한 도움이라도 부탁드리겠습니다.
일정이 있어서 더 이상 지체할수가 없는 상황이라 간곡히 부탁드립니다.
긴 글 읽어주셔서 너무나 감사드립니다.
감사합니다.!!
혹시 레퍼런스는 찾아보셨나요?
혹시 레퍼런스는 찾아보셨나요?
https://msdn.microsoft.com/en-us/library/cyfc5et8.aspx#cruntimeclass__fromname
CRuntimeClass::FromName라는 메서드가 있는 듯하군요.
답변 감사드립니다.
답변 감사드립니다.
네 예전에 찾아보고 CRuntimeClass* pClass = CRuntimeClass::FromName("Com1");
이렇게 했었는데요...
pClass에는 null 값으로 들어와집니다.
이게 뭔가 미리 어딘가에 클래스를 등록을 해줘야하나싶기도 한데...
문자열만으로 해결하는건 도저히 되질 않네요 ㅠㅠ
혹시 몰라서 여쭤봅니다만,
혹시 몰라서 여쭤봅니다만,
Com1 및 Com2가 CObject를 상속받고 있나요?
그리고 클래스 구현에는 IMPLEMENT_DYNCREATE를 사용하셨나요?
https://msdn.microsoft.com/ko-kr/library/56302tyt.aspx
레퍼런스에서 요구하는 조건을 모두 만족하셨는지 점검하실 필요가 있어 보입니다.
어려운 문제네요.
두가지를 아래 사이트에서 모두 검색해 봅니다.
운이 좋으면. 원하시는 예제를 찾으실 수 도 있습니다.
CRuntimeClass
RUNTIME_CLASS()
MSDN 과 책에서 함수 인자값. 리턴값. 오류값. 등을 확인해봅니다.
실행 잘되는. 책과 SDK 예제소스를 참고해봅니다.
혼자 어려우시면. 동아리. 블로그. 학원. 직업학교. 대학교. 창업보육센터. 인터넷 강의. 등을 참고해봅니다.
여럿이 같이 공부하시면. 좀 더 편할겁니다.
컴퓨터와 인터넷 좋은거로 사용하시면 좋습니다.
기술 지원을 받으실 수 있다면 더 좋을겁니다.
데브피아 VC 마을. Q/A. 자료실. 질문 답변
http://www.devpia.com/VC++.MAEUL
구글
https://www.google.co.kr
네이버
http://se.naver.com
코드 프로젝트 : MFC 예제
https://www.codeproject.com/
코드 구루 : VC 예제
http://www.codeguru.com/
네이버 책 : VC MFC .Net 검색
http://book.naver.com/
강컴 : VC MFC .Net 검색
http://www.kangcom.com
WinAPI
http://soen.kr/
팁 소프트
http://tipssoft.com/
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기