2008-09-12 5 views
16

필자는 Delphi 7로 작성된 오래된 PC 전용 응용 프로그램을 유지합니다. Delphi가 과거에 나에게 매우 도움이되었지만 이제는이 응용 프로그램에서만 사용하고 언어가 줄어들면서 내 기술을 찾습니다. 그 구문은 Java/Ruby의 '일상 업무'언어와 너무 다르므로 새 코드를 작성하는 데 더 오랜 시간이 걸립니다. 게다가 너무 오래되었습니다. 코드를 사용하지 않았습니다. 지금 나에게 고대인이되는 것!Delphi 7 응용 프로그램을 C# 및 .Net 프레임 워크로 변환하는 데 사용할 수있는 도구는 무엇입니까?

내 사용자 중 많은 수가 Vista로 이전하고 있습니다. 호환 모드에서 응용 프로그램을 실행하거나 IT 부서에서 PC를 구성하는 방법에 따라 GPF 문제가 발생할 수 있으므로 응용 프로그램에 대한 유지 관리 작업을해야합니다. 더 익숙한 스택으로 넘어 가야하는지 궁금합니다.

이 아닌 표준 구성 요소의 변환에 집중하는 저를 떠나, C 번호로 코드베이스를 변환하는 마술을 할 것 자동화 된 도구가 있습니까? 나는 BDE와 호환되며 표준 SQL을 사용하는 AbsoluteDatabase이라는 임베디드 데이터베이스 구성 요소를 사용하고 있으며 Microsoft 세계에서 무언가로 바꿀 수있는 기본 델파이 HTML 브라우저 구성 요소를 사용하고 있습니다.

변환 도구는 얼마나 좋은가?

답변

14

나는 그 변환을위한 자동화 된 도구를 모르고있다. 개인적으로 저는 델파이에 충실하고 새 버전으로 업그레이드 할 것을 제안합니다. 델파이에서 C#으로 변환하려고하는 DOM 코드 몇 개를 보았지만 라이브러리 문제는 해결하지 못했습니다.

코드기어 (공식적으로 볼랜드는) 확인을 작동 going from C# to Delphi을위한 도구가 있습니다. 나는 다른 방향으로 나아가는 도구가 똑같이 작동 할 것이라고 생각한다. (많은 편집이 필요하다.) 다음은 동일한 CodeDOM 원칙에 따라 Delphi to C# (및 다른 많은 언어)에서 작동하는 스웨덴어 도구입니다. 다른 사람들이 있습니다, 나는 지금 그들을 찾을 수 없습니다.

또 다른 옵션은 그런 식으로 .NET으로 .NET과 포트 코드 델파이의 더 재전송 버전으로 업그레이드하는 것입니다. Delphi for .NET (.NET 버전이없는 한 임베디드 DB를 제외하고는 매우 쉽습니다)에서는 .NET ReflectorFile Disassembler을 사용하여 IL을 C#으로 되돌릴 수 있습니다. 여전히 VCL을 사용하지만 오브젝트 파스칼 대신 C#을 사용할 수 있습니다.

또 다른 유사한 솔루션은 Oxygene by RemObjects에 포트 여기에있을 것이다. 델파이 Win32 마이그레이션 경로가 WinForms에 있다고 생각합니다. 그런 다음 .NET ReflectorFile Disassembler을 사용하여 IL에서 C#으로 되돌립니다.

요컨대, 쉬운 대답이 없습니다. 언어 마이그레이션은 라이브러리 마이그레이션보다 쉽습니다. 많은 것은 (AbsoluteDatabase를 넘어서서) 어떤 타사 구성 요소를 사용했는지, 그리고 응용 프로그램에서 직접 Windows API 호출을 한 경우에 따라 다릅니다.

또 다른 완전히 다른 옵션은 응용 프로그램을 유지하기 위해 오프 쇼어 팀을 찾아 너무 될 것입니다. 그들은 아마도 그렇게 싸게 할 수 있습니다. (당신이 모르는 처지는 달러와 가난한 취업 시장에 있지만...) 당신은 국내에서 사람을 찾을 수 있지만 더 의심의 여지가 비용을 부담하지 않을 것이다

행운을 빕니다!내 사용자의 대부분

4

호환성 모드에서 응용 프로그램을 실행하거나 GPF에 문제가있을 수있는 비스타 로 이동 자신의 PC가 자신의 IT 부서에서 를 구성 방식에 따라, 그래서 좀 할 필요가 유지 관리 응용 프로그램에서 . 내가해야하는지 궁금 하네 더 친숙한 스택으로 이동.

비표준 작업을 수행하지 않는 한 D7 응용 프로그램은 Vista에서 잘 실행되어야합니다.

C#으로의 변환은 대부분의 변환 도구가 시간 낭비라고 생각합니다. 더 나은 접근법은 처음부터 응용 프로그램을 다시 작성하는 것입니다.

2

쉽게 대답 할 수있는 것은 없지만 Delphi.net 변형 언어가 .net 런타임을 대상으로하며 .net의 다양한 언어가 긴밀하게 상호 운용 될 수 있음을 명심하십시오.

Delphi.Net에서 컴파일하려고 시도 할 수 있습니다. 다른 어셈블리로 분해 한 다음 하나씩 수동으로 어셈블리를 변환합니다. 리플 렉터는 컴파일 된 코드를 C# 코드의 스켈레톤으로 리버스 엔지니어링하는 데 도움이 될 수 있습니다. 그러나 주석, 내부 변수 이름 등은 없습니다.

반면에 Delphi.net은이 프로젝트에 사용할 수 있습니다.

하지만 좋은 테스트 스위트가 없다면 (아마도 델파이 7의 최첨단 기술을 고려할 때 아마도 짐작할 수 있습니다.) 버그를 도입 할 것입니다.

5

존 브랜트 (John Brant)가 150 만 회선의 Delphi 프로젝트를 C#으로 성공적으로 변환 한 과학적보고가있었습니다. 그는 AST에서 델파이 파서, C# 생성기 및 많은 변형 규칙을 작성했습니다. 일상적인 빌드, 많은 단위 테스트 및 어려운 델파이 파트의 재 작성을 통해 점차적으로 규칙 집합을 확장하여 팀원 4 명과 함께 델파이 & C# 지식이 풍부한 원래 개발자 중 일부가 18 개월 만에 소프트웨어. 존 브랜트가 리팩토링 브라우저 및 SmaCC 컴파일러 구축 키트의 최초 개발자가 되어서도 그럴 수는 없습니다.

관련 문제