C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[13391] Re:델파이 유닛에서 C++을 호출하는 건 불가능합니다.
박지훈.임프 [cbuilder] 2420 읽음    2007-09-21 09:41
언어나 개발툴에 대한 기술적인 질문은 Q/A로...!

린님 말씀대로 1번은 가능하고..
2번은 불가능합니다.

델파이에서 각 유닛간의 연관 관계는 dcu를 통해서 하게 되지요. 반면 C++에서는 hpp와 obj 파일을 통해서입니다.

그리고 C++빌더에서 델파이 유닛을 액세스할 때도 델파이에서 하듯이 dcu를 통하는 것이 아니라, hpp와 obj를 통해서입니다. 이 hpp/obj 파일은 C++빌더에 포함된 dcc32 델파이 컴파일러가 델파이 유닛을 컴파일하는 과정에서 자동으로 만들어줍니다.

C++빌더 컴파일러와 링커 자체는 크로스 언어 컴파일러가 아니고, dcu와 obj가 용도와 목적이 비슷하기는 해도 다른 구조이기 때문에 당연하죠.

그런데 이런 방식으로 C++빌더에서 델파이 유닛을 액세스하는 것은 가능하지만, 그 반대는 불가능한 이유는, pas 파일로부터 obj와 hpp를 만들어내는 것은 가능하지만, C++ 파일로부터 dcu를 만들어내는 것이 불가능하기 때문입니다.

그 이유로는, 다른 여러 차이점들의 이유도 있겠지만, 제가 생각할 때 가장 큰 문제는 C++ 언어의 스펙이 오브젝트 파스칼의 스펙보다 훨씬 복잡하고 다양한 문법을 지원하기 때문입니다.

pas -> hpp 생성에서처럼 최소한 호출을 위한 인터페이스와 프로토타입이 나와야 되는데, C++의 인터페이스나 프로토타입은 오브젝트 파스칼보다 훨씬 복잡합니다. 단적인 예를 들자면 템플릿 객체를 인자로 전달하는 경우 델파이에서는 번역할 방법이 전혀 없죠.

물론 오브젝트 파스칼 언어의 인터페이스, 프로토타입에서 지원하는 문법 중에서 C++에서 지원하지 않는 것도 몇가지 있죠. 이런 건 그다지 많지 않기 때문에, 잘 알려져 있다시피 볼랜드에서 C++빌더를 처음 개발하는 과정에서 __property나 __published, __classid 처럼 문법을 좀 확장하거나 typedef 같은 걸로 크게 어렵지 않게 지원할 수 있었던 겁니다.

다만, 다음과 같은 두가지 방법은 가능합니다.

먼저, C++이 아닌 C 인터페이스의 소스를 만들고 obj 형식으로 pas 파일에 바로 링크시키는 방법이 있습니다. 이 방법을 쓰면 매끄럽지만 클래스 형식은 전혀 불가능하니까 여러가지로 불편합니다.

두번째 방법은 제가 궁리끝에 구현해봤던 좀 더 복잡하고 역시 제한도 있는 방법인데, 잘 응용하면 꽤 실용적입니다.
델파이 클래스를 C++에서 상속받은 후 오버라이드를 하든지 해서 기능을 확장하고 객체를 만든 후, 그런 객체를 델파이 유닛에서 원래의 클래스 그대로 호출하는 겁니다. 그러면 오버라이드된 기능은 그대로 C++ 소스에서 구현된 대로 동작 가능합니다. 하지만 이렇게 하면, 델파이에서 작성했던 베이스 클래스에 아예 존재하지 않았던 C++에서 새로 추가된 새 멤버를 액세스할 수가 없게 되죠. 제가 지난번 프로젝트에서 이런 방법을 써서 델파이에서 C++ 소스를 호출했었습니다.

이 방법의 경우, 가장 간단한 예로는 폼같은 것에 적용하기에 좋습니다. TForm이나 TFrame 등은 델파이 클래스이기 때문에, 이 클래스의 인터페이스대로 액세스하는 것이 가능하죠. 다시 말해, 일단 객체가 생성만 되면 델파이 소스에서 C++빌더에서 만든 폼의 TForm 멤버는 그대로 호출이 가능하다는 얘기입니다. 다만 이러기 위해서는 꽤 복잡한 클래스 등록, 객체 생성, 호출관계가 필요합니다. 하지만 그럴 가치가 있는 경우도 종종 있죠.

그럼..


델파이날개 님이 쓰신 글 :
: .
: 다음 조건의 App 개발이 가능합니까?
:
: 1. C++ Builder에서 Delphi Form을 메인으로 한다.
:
: 2. Delphi Form, 그러니까 Pascal에서 같은 Project에 등록된
:     c++ class를 생성하고 엑세스 할 수 있나?
:
: 3. 위의 두가지가 가능하다면 어떤 설정으로 가능한가?
:
: 부탁드립니다.
: .

+ -

관련 글 리스트
13389 C++ Builder환경에서 Delphi Form을 메인으로 하는 APP 작성 델파이날개 2530 2007/09/20
13395     Re:C++ Builder 클래스를 델파이 유닛에서 사용하기. 김태선 2674 2007/09/21
13391     Re:델파이 유닛에서 C++을 호출하는 건 불가능합니다. 박지훈.임프 2420 2007/09/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.