C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 강좌/문서
C++Builder Programming Tutorial&Docments
[142] C++에서 작성된 클래스를 델파이 유닛에서 사용하기.
김태선 [cppbuilder] 25546 읽음    2007-09-21 13:15
C++Builder 프로젝트에는 델파이 유닛(.pas)를 포함할 수 있습니다.
즉 .pas 유닛을 포함해 하나의 단일한 실행파일로 만들어 낼 수가 있는 것이죠.

이 유닛에서 C++쪽에서 구현한 클래스를 호출할 수 있을까요?
이전 저의 강좌에서는 C++쪽 유닛에서 구현한 함수를 호출하는 방법에 대한 내용을 소개한 적이 있습니다.
지금까지는 함수는 호출 가능하나, 클래스는 호출이 불가능하다고 알려져 있는 것 같습니다.
그래서 제가 생각하기에 델파이와 C++빌더는 클래스 구현의 유사성이 높은데
왜 C++로 작성된 클래스를 사용할 수 없는 것일까 의아했습니다.
당연히 사용할 수 있어야 하는데....
그래서 실험을 해 보니, 역시 문제를 가로 막고 있는 것은 언어의 구조적인 문제 때문이더군요.

이 언어의 구조적인 또는 문법적인 문제는
추상클래스를 공유하는 방법으로 얼마든지 C++로 된 클래스를 사용할 수 있습니다.

즉 C++로 구현된 클래스를 추상화 시킨 원형 클래스를 정의해 주면 됩니다.
여기서의 추상화란 OOP의 진짜 추상화가 아니고 문법적인 추상화로서
클래스에서 사용한 메소드를 순수 가상함수로 뽑아서 정의해 주고
실제 구현 클래스는 이 추상 클래스를 상속 받도록 하면 됩니다.

하지만 이때 추상클래스를 사용하게 되면 가상 메소드를 위한 VTable(Virual Table)가 생성되므로
클래스 코드내에서 ZeroMemory(this, sizeof(*this)); 같은
클래스 내의 모든 데이타를 클리어 하는 코드는 가상 함수 테이블도 지워버리는 역할을 하므로
정확한 메모리 영역만 클리어 하도록(VTable을 피해서) 조금 조정해 사용해야 합니다.


실제 구현한 예제를 첨부합니다.

보다 세부적인 설명은 소스에 해 놨습니다.
물론 너무 부족할 수도 있겠지만
구현하시려는 분께는 충분한 도움이 될 것입니다.

C++클래스를 C++ 유닛에서 사용하듯이 자유롭지는 않으나
실무에  무리 없이 사용할 수 있으리라 생각됩니다.

참고.
볼랜드 제품은 한글에 대해 좀 불친절하기 때문에 프로젝트가 있는 디렉토리의 full path에는
한글을 쓰지 않는 것이 좋습니다. 가끔 include 된 파일을 못 찾을때가 있습니다.

그럼.

이 기사는 Free 입니다.
작성자 : 김태성 jsdkts@korea.com

+ -

관련 글 리스트
142 C++에서 작성된 클래스를 델파이 유닛에서 사용하기. 김태선 25546 2007/09/21
(링크)     Delphi 강좌/문서자료 > C++에서 작성된 클래스를 델파이 유닛에서 사용하기.
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.