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

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[10794] Re:델파이 코드를 C++빌더 코드로 바꿔주는 툴 같은 것 있나요?
박지훈.임프 [cbuilder] 1443 읽음    2005-08-03 02:05
좀 늦었습니다만...

전혀 불가능합니다. 그런 게 가능했다면 아마 볼랜드에서 델파이나 C++빌더에서 그런 기능을 지원했을 겁니다.
그리고 그게 가능하다면 C++빌더의 VCL 소스도 파스칼로 그냥 두지 않고 모두 C++로 컨버팅해놓지 않았겠습니까.
델파이 문법과 C++ 문법은 비슷한 면도 많지만 전혀 호환이 될 수 없는 부분도 적지 않습니다.

이런 저런 이유로 델파이 소스를 C++빌더로 포팅하기도 여러번 했고 그 반대도 여러번 했는데, 호환이 전혀 불가능한
문법들 때문에 애먹은 경우가 아주 많았습니다.

예를 들면 C++의 switch문은 파스칼의 case문과 대단히 비슷하지만 case문에서는 각각의 경우에 대해 범위를 설정할
수 있고, 반대로 C++에서는 각각의 경우에 대해 break를 넣어주지 않으면 다음 경우로 실행이 계속되지만 파스칼에서는
break가 없어도 무조건 그 경우가 끝나면 case 전체의 바깥으로 나갑니다.

또 C++의 return문과 파스칼의 result/exit도 엄청 다릅니다. C++에서는 return 키워드에 현재 함수를 빠져나가는 목적과
리턴값을 돌려주는 목적, 두가지 기능을 하기 때문에 "return 값;"을 호출한 후에 그 함수의 코드를 계속 실해앟는 것이
불가능하지만(예외처리의 경우는 제외), 파스칼에서 result는 결과값을 저장해두는 정도의 역할이기 때문에 result에
돌려줄 값을 넣어준 후에도 코드 실행은 계속되며, 함수를 빠져나가려면 exit라는 다른 키워드를 써야 합니다.

또 논리연산의 경우도 판이합니다. 파스칼에서는 if 다음처럼 논리연산이 필요한 경우, 무조건 boolean 타입이어야 합니다.
하지만 C++에서는 boolean이건 아니건 정수이건 아니건 어떤 타입의 값이든지 0이면 거짓 0이 아니면 참이 됩니다.

또 이런 경우도 있습니다. 파스칼의 경우, OOP가 구현 가능하지만 OOP를 벗어난 편법도 있습니다.
예를 들면, 아무리 서로 다른 두 클래스의 객체라도, 두 클래스가 하나의 소스 파일 안에 있으면 다른 클래스의 private
멤버까지 액세스할 수 있습니다. 실제로 이런 문법을 쓰는 경우가 적지 않은데(심지어는 볼랜드의 VCL 소스에서도),
C++에서는 이런 문법을 직접 구현할 방법이 없습니다. friend같은 키워드를 쓰면 가능하기도 하지만 머리를 굴려야 할
다른 문제가 생기기도 합니다.

파스칼 문법에서 initialization과 finalization 같은 경우에는 C++에서 아예 지원하지 않으며, 대체할 다른 방법도 전혀
없습니다. 아주 편법을 쓴다면 어떤 경우에는 비슷하게 구현할 수도 있겠지만, 일반적으로는 전혀 불가능하다고 생각하는
것이 맞습니다.

상상해보세요. 이런 경우들은 사람의 머리가 개입하지 않으면 절대로 포팅이 되지 않습니다.
게다가 이런 문법적인 차이들이 아주! 가끔씩 쓰이는 문법이면 좋겠지만 위의 경우들은 대단히 자주 쓰이는 문법들에서
차이가 나는 경우들만 예를 든 것입니다.

그래서... 볼랜드가 C++빌더를 처음 설계할 때, 델파이의 소스인 VCL을 가져다 쓸 수 있게 한 것이 그만큼 더 대단한
것입니다. C++빌더에서 델파이 소스를 컴파일하면 델파이 소스에서 interface 부분을 번역해서 C++ 헤더 파일로 만들어
주는데, 이게 별거 아닌 거 같아도 엄청난 일입니다. 단지 선언부밖에 없는 헤더파일만 컨버팅하는 거니까 위의 모든
경우에 해당하지 않지만 그것도 장난아니게 대단한 일인 겁니다.

역시... 의견글을 다신 분 의견처럼, 양쪽 모두를 잘 하시는 분을 뽑아서 수작업으로 컨버팅하는 것 밖에는 다른 방법이
없습니다. 그나마 조금 일을 덜려면, C++빌더에서 델파이 소스로부터 헤더를 만들어주는 기능을 이용하여 선언부라도
자동으로 컨버팅하는 겁니다. 윈도우 프로그래밍에서 사용되는 그 많은 다양한 타입들을 변환하는 것만해도 엄청난
일이기 때문에, 헤더라도 자동으로 만들어주면 그만큼 일이 적지않게 덜어집니다. 실제로 저도 그런 방법을 쓰고 있답니다.

그럼...


bluewing 님이 쓰신 글 :
: 처음에  닷넷 프로젝트라고 해서 예스라고 대답하고 프로젝트에 참가했는데,
: 알고보니 델파이로 만들어진 시스템을 닷넷 기반으로 바꾸는 작업이네요... -.-;
:
: C++빌더는 사용해왔으니까 어느정도 눈치로 때려잡을 수 있을 것 같기도 했는데,
: 파스칼 문법을 전혀 모르니까, 로직을 확실하게 이해할 수 없습니다.
: 이러다간 버그덩어리 프로그램만 잔뜩 만들게 될 것 같은데.. 떱....
:
: 델파이 코드를 C++코드로 전환시켜주는.. 뭐 그런 것 없을까요?
: 하긴 둘이 닮았다고 하기엔 거리가 먼 녀석들이긴 하지만
: 혹시나 방법이 없나하고 질문해 봅니다. T,.T
bluewing [bluewing]   2005-08-03 23:26 X
위선에서는 그냥 만들어져 있는.. 고대로 옮겨서 코딩하면 되지 않느냐고
계속 졸라대는데...

이미 기본 프레임을 자기들이 결정해놓은 상태에서 거기에 적용해 옮기려니 그건 안되는 상황이고.. 음. 죽겠심다. ㅎㅎ
류종택 [ryujt]   2005-08-04 15:54 X
예전에 C에서 Pascal로 전환하는 프로그램이 있었습니다.
사용하고나서 바로 지웠습니다.

박지훈님이 말씀하신 것처럼
호환되지 않는 문법 때문에 거의 불가능한 듯 합니다.

기냥 dll로 만들어서 사용하면 안되는 건가요?

+ -

관련 글 리스트
10784 델파이 코드를 C++빌더 코드로 바꿔주는 툴 같은 것 있나요? bluewing 1695 2005/07/28
10794     Re:델파이 코드를 C++빌더 코드로 바꿔주는 툴 같은 것 있나요? 박지훈.임프 1443 2005/08/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.