2008-09-12 17 views
16

Tôi duy trì một ứng dụng PC cũ chỉ được viết bằng Delphi 7. Mặc dù Delphi đã phục vụ tôi rất tốt trong quá khứ, bây giờ tôi chỉ sử dụng nó cho ứng dụng này và tìm kỹ năng của tôi với ngôn ngữ giảm dần. Cú pháp của nó quá khác với ngôn ngữ 'công việc ban ngày' của Java/Ruby nên tôi mất nhiều thời gian hơn để tìm ra đoạn mã mới, cộng với nó quá cũ nên tôi chưa sử dụng nhiều giao diện để mã không quản lý mà dường như cổ xưa với tôi bây giờ!Công cụ nào tồn tại để chuyển đổi ứng dụng Delphi 7 sang C# và khung .Net?

Nhiều người dùng của tôi đang chuyển sang Vista có thể chạy ứng dụng ở chế độ tương thích hoặc có thể gặp sự cố GPF tùy thuộc vào cách máy tính của họ được cấu hình bởi bộ phận CNTT của họ, vì vậy tôi phải thực hiện bảo trì trên ứng dụng. Tôi tự hỏi nếu tôi nên nhảy đến một ngăn xếp quen thuộc hơn.

Có công cụ tự động nào sẽ thực hiện tác vụ chuyển đổi cơ sở mã thành C#, để tôi tập trung vào việc chuyển đổi trên bất kỳ thành phần không chuẩn nào không? Tôi đang sử dụng một thành phần cơ sở dữ liệu nhúng được gọi là AbsoluteDatabase tương thích với BDE và sử dụng SQL chuẩn trong toàn bộ, và một thành phần trình duyệt Delphi HTML có thể được trao đổi với một thứ gì đó từ thế giới Microsoft.

Các công cụ chuyển đổi này hiệu quả đến mức nào?

Trả lời

14

Tôi không biết bất kỳ công cụ tự động nào để thực hiện chuyển đổi đó. Cá nhân tôi sẽ đề nghị bạn gắn bó với Delphi, có thể chỉ cần nâng cấp lên một phiên bản mới. Tôi đã thấy một vài mã DOM của cố gắng để chuyển đổi từ Delphi để C#, nhưng điều đó không giải quyết vấn đề thư viện.

CodeGear (chính thức Borland) có công cụ cho going from C# to Delphi hoạt động OK. Tôi cho rằng các công cụ đi theo hướng khác sẽ hoạt động như nhau (yêu cầu nhiều chỉnh sửa). Đây là một công cụ của Thụy Điển hoạt động trên cùng nguyên tắc CodeDOM để chuyển từ Delphi to C# (và một số ngôn ngữ khác). Có những người khác, tôi không thể tìm thấy chúng ngay bây giờ.

Một tùy chọn khác là nâng cấp lên phiên bản Delphi cho .NET và chuyển mã của bạn sang .NET theo cách đó. Một khi bạn nhận được nó làm việc trong Delphi cho. NET (mà sẽ được khá dễ dàng, ngoại trừ DB nhúng, trừ khi họ có một phiên bản .NET), bạn có thể sử dụng .NET ReflectorFile Disassembler đảo ngược IL đến C#. Bạn vẫn sẽ sử dụng VCL, nhưng bạn có thể sử dụng C# thay vì Object pascal.

Một giải pháp tương tự khác là chuyển cổng thành Oxygene by RemObjects. Tôi tin rằng họ có một con đường di trú Delphi Win32 để WinForms. Sau đó sử dụng .NET ReflectorFile Disassembler đảo ngược IL thành C#.

Tóm lại, không có câu trả lời dễ dàng nào. Di chuyển ngôn ngữ dễ dàng hơn khi di chuyển thư viện. Rất nhiều phụ thuộc vào thành phần bên thứ 3 bạn đã sử dụng (ngoài AbsoluteDatabase) và nếu bạn thực hiện bất kỳ lệnh gọi API Windows nào trực tiếp trong ứng dụng của mình.

Một tùy chọn hoàn toàn khác sẽ là quá tìm kiếm một nhóm ngoài khơi để duy trì ứng dụng. Họ có thể làm như vậy với giá rẻ. Bạn có thể tìm thấy một người nào đó trong nước, nhưng nó sẽ chi phí bạn không có nghi ngờ (mặc dù với đồng đô la chảy xệ và thị trường việc làm nghèo bạn không bao giờ biết ...)

Chúc may mắn!

4

Nhiều người trong số người dùng của tôi được chuyển sang Vista có thể chạy các ứng dụng trong chế độ tương thích hoặc có thể có vấn đề GPF tùy thuộc vào cách PC của họ được cấu hình bởi bộ phận CNTT của họ, vì vậy tôi phải làm một số bảo trì trên ứng dụng . Tôi tự hỏi nếu tôi nên chuyển sang một ngăn xếp quen thuộc hơn.

Trừ khi bạn đang làm điều gì đó không chuẩn, các ứng dụng D7 sẽ chạy tốt trong Vista.

Để chuyển đổi thành C#, tôi nghĩ rằng hầu hết các công cụ chuyển đổi sẽ lãng phí thời gian. Một cách tiếp cận tốt hơn có thể là viết lại ứng dụng từ đầu.

2

Không có câu trả lời dễ dàng, nhưng lưu ý rằng biến thể Delphi.net của ngôn ngữ nhắm mục tiêu thời gian chạy .net và các ngôn ngữ khác nhau trên .net có thể tương thích chặt chẽ.

Bạn có thể thử làm cho nó để biên dịch trong Delphi.Net, bao thanh toán vào các hội đồng khác nhau và sau đó chuyển đổi các hội đồng bằng tay từng người một. Trình phản xạ có thể giúp mã được biên dịch ngược được biên dịch thành một bộ xương của mã C# - tương đương nhưng không có nhận xét, tên biến nội bộ, vv ..

Mặt khác, Delphi.net có thể đủ tốt (TM) cho dự án này.

Nhưng trừ khi bạn có một bộ kiểm tra tốt (tôi đoán có lẽ không, cho nhà nước của nghệ thuật trong Delphi 7) bạn sẽ giới thiệu lỗi.

5

Đã có báo cáo khoa học về sự chuyển đổi thành công của Dự án Delphi dòng 1,5 triệu thành C# của John Brant. Ông đã viết một trình phân tích cú pháp Delphi, một trình tạo C# và rất nhiều quy tắc chuyển đổi trên AST. Dần dần mở rộng bộ quy tắc, thực hiện xây dựng hàng ngày, rất nhiều bài kiểm tra đơn vị và một số phần viết lại Delphi khó khăn cho phép anh ta với một nhóm 4 người, trong đó một số nhà phát triển gốc, với kiến ​​thức sâu Delphi & C#, để di chuyển phần mềm trong 18 tháng. John Brant là nhà phát triển ban đầu của trình duyệt tái cấu trúc và bộ công cụ xây dựng trình biên dịch SmaCC, bạn sẽ không thể thực hiện điều đó nhanh chóng

Các vấn đề liên quan