VB6 เป็น C#
ตัวแปลง VB6 ที่ใช้ VB6 -> C# 2017
การใช้งาน
ใช้งานได้ฟรี ฟรีเพื่อส้อม มีส่วนร่วมฟรี อิสระที่จะสอบถามเกี่ยวกับ ขายฟรีครับ. ขายฟรีภายใต้ชื่อของคุณเอง... ทำอะไรก็ได้ฟรี ยกเว้นบอกว่าทำไม่ได้ (ดูใบอนุญาต)
ดูด้านล่างสำหรับข้อมูลพื้นฐาน ดู Wiki สำหรับข้อมูลโดยละเอียดเพิ่มเติม โปรดติดต่อเพื่อรับการสนับสนุน
เริ่มต้นอย่างรวดเร็ว
- เปิดไฟล์
prj.vbp เริ่มโปรแกรม (ต้องใช้ VB6 IDE) - ป้อนค่าการกำหนดค่าบางส่วนลงในแบบฟอร์ม
Config ผ่านทางปุ่ม - เมื่อคุณเลือกโครงการของคุณแล้ว ให้คลิกปุ่ม
SCAN ซึ่งช่วยให้ตัวแปลงทราบความแตกต่างระหว่างวิธีการที่ไม่มีวงเล็บและตัวแปร/ค่าคงที่ นอกจากนี้ยังสร้างรายการนำเข้าทั้งหมด (ซึ่งสามารถล้างข้อมูลได้ใน VS 2019 IDE ผ่าน ^K^E) - หากคุณต้องการ คลิก
SUPPORT เพื่อสร้างโครงสร้างการสนับสนุนโครงการพื้นฐาน- หรืออีกทางหนึ่ง ไฟล์
VBExtension.cs และ VBConstants.cs สามารถคัดลอกได้โดยตรงจากรูทโปรเจ็กต์และรวมไว้ที่อื่น
- จากนั้นป้อนชื่อไฟล์แล้วคลิก
Single File เพื่อลองแปลงไฟล์ที่คุณป้อนอยู่ข้างๆ
หากคุณต้องการแปลงทั้งโปรเจ็กต์ เพียงคลิก ALL จากนั้นระบบจะทำการสแกน การสร้างการสนับสนุน และการแปลงโปรเจ็กต์ทั้งหมดทันที
หมายเหตุ: อาจไม่ใช่วิธีที่เร็วที่สุด แต่ยังต้องใช้ความพยายามด้วยตนเอง แต่จะเร็วกว่าการดำเนินการทั้งหมดด้วยตนเอง!
อัพเดท 2021-12-01
เวอร์ชันดั้งเดิมของตัวแปลงแก้ไขปัญหาด้วยวิธีแบบบล็อกต่อบล็อก โดยแยกทุกหน่วยโปรแกรมลอจิคัลออกเป็นสตริงของตัวเองและทำการแปลงด้วยตนเอง เป็นผลให้ตัวแปลงทำการส่งผ่านหลายครั้งและโดยทั่วไปทำงานช้ามาก หลังจากอัปเดต linter เพื่อไม่ให้ใช้วิธีการนี้ แต่เพียงเพื่อรันโค้ดจากบนลงล่าง ปรากฏชัดว่าตัวแปลงสามารถทำสิ่งเดียวกันได้ด้วยความแม่นยำที่มาก
ดังนั้นที่ปล่อยออกมาในวันนี้คือ v2 ของตัวแปลง ด้านข้าง v1 ผ่านปุ่มตัวเลือกบนฟอร์มหลัก คุณสามารถมิกซ์แอนด์แมตช์ แปลงทั้งโปรเจ็กต์เป็นไฟล์เดียวได้ตามใจชอบ จากนั้นจึงแปลงไฟล์เป็นไฟล์เดี่ยวกับอีกไฟล์หนึ่ง หวังว่าด้วยสองแนวทางที่แตกต่างกันอย่างสิ้นเชิง หนึ่งในสองวิธีนี้จะทำงานได้ดีกว่าอีกวิธีหนึ่งและส่งผลให้งานน้อยลง ขอย้ำอีกครั้งว่าทั้งคู่ยังคงมี Conversion เพียง 80-90% เท่านั้น มีหลายสิ่งที่คุณต้องทำด้วยมือและตรวจสอบอีกครั้ง (เช่น ขอบเขตการวนซ้ำ) แต่แน่นอนว่ามันจะดีกว่าการเปลี่ยน & s ทั้งหมดในโค้ด VB6 ของคุณเป็น + s สำหรับ C#
ฉันจะ...?
มีคำถามมากมายเกี่ยวกับการแปลง หากคุณเพียงต้องการทราบวิธีที่ตัวแปลงนี้จัดการกับรูปแบบเฉพาะ โปรดดูที่ ฉันจะทำอย่างไร ...? หน้าในวิกิของเรา
ไม่ว่าคุณจะใช้ตัวแปลงนี้หรือไม่ก็ตาม เราก็มอบวิธีแก้ปัญหาให้กับปริศนาการแปลงที่พบโดยทั่วไป โซลูชันของเรารวดเร็ว ตรงประเด็น และโดยทั่วไปไม่ได้ใช้การเขียนโปรแกรมหรือบริบทมากเกินไป แม้ว่าพวกมันอาจอาศัยโมดูลส่วนขยายของเรา แต่ทั้งหมดนั้นเป็นโค้ด C# ดั้งเดิม และโดยทั่วไปจะค่อนข้างคล้ายกับที่คุณทำ int VB6
ความต้องการ
ข้อกำหนดของตัวแปลง
- ตัวแปลงทำงานใน VB6 IDE คุณรู้ไหมว่า IDE ของโปรแกรมที่คุณพยายามแปลง
ข้อกำหนดของโปรแกรมที่แปลงแล้ว
- Visual Studio รองรับ C# เวอร์ชันที่ค่อนข้างทันสมัย หรือสลับกัน
- Visual Basic Power Packs / ลิงก์อื่น / มีให้ใน Repo เนื่องจากอาจหายากในบางวัน
- อนุญาตให้ใช้ฟังก์ชัน Standard VB เช่น
Mid , Trim , Abs , DateDiff ฯลฯ ได้โดยตรงในโค้ด C# - รับประกันความเข้ากันได้ 99.9% กับฟังก์ชัน VB6 (ยกเว้น
Format ...) โดยไม่จำเป็นต้องใช้ไลบรารีกล่องดำของบุคคลที่สาม (มาจาก MS ดังนั้นจึงเป็นกล่องดำของบุคคลที่ 1) - ทำซ้ำได้ง่ายเมื่อแปลงและเปิดใช้งานแล้ว
คำแนะนำ
โปรดดูวิกิสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้งาน
ข้อควรพิจารณาในการออกแบบ
- ง่าย - ไม่ได้ออกแบบมาเพื่อทำการแปลง 100% แค่อาจจะ 80% - 90% ของงานฮึดฮัด
- อิง VB6 - เพราะเหตุใดจะไม่ได้ คุณต้องมีคอมไพเลอร์ VB6 ที่ใช้งานได้หากคุณกำลังแปลง FROM vb6 อยู่แล้ว
- กำหนดเอง - สิ่งนี้ถูกสร้างขึ้นสำหรับโปรเจ็กต์ส่วนตัว ดังนั้นจึงได้รับการออกแบบมาโดยเฉพาะสำหรับกรณีการใช้งานของเรา แต่ไม่มีเหตุผลว่าทำไมบางคนไม่สามารถตรวจสอบตรรกะและปรับแต่งมันสำหรับปัญหาของตนเองได้
- ฉวยโอกาส - โค้ดนี้อาศัยความสม่ำเสมอของ VB6 IDE อย่างมาก:
- การเว้นวรรคค่อนข้างสอดคล้องกันเนื่องจาก IDE บังคับใช้
- สามารถรับประกันการใช้อักษรตัวพิมพ์ใหญ่ของคำหลักได้
- เราใช้ประโยชน์จาก Microsoft Power Packs และไม่จำเป็นต้องแปลงคำสั่ง VB6 หลักส่วนใหญ่ นอกจากนี้ คุณยังสามารถใช้คำสั่ง USE ต่อไปได้ เช่น
DateDiff , Left , Trim เหมือนกับที่คุณทำใน VB หรือถ้าคุณต้องการ ให้เริ่มย้ายออกจากพวกเขาหลังการเปลี่ยนใจเลื่อมใส เราเพียงดึงไลบรารีของ Microsoft เข้ามาเพื่อความเข้ากันได้สูงสุด และด้วยเหตุนี้ เราจึงไม่มีไลบรารีแทนที่สตริงขนาดใหญ่ และเราไม่ได้พึ่งพามากเท่ากับตัวแปลงบางตัวที่ทำกับ DLL หรือไลบรารีของเราเอง (เราสร้างบางส่วนเพื่อความสะดวกในการใช้ไวยากรณ์ แต่ ผลลัพธ์ที่ได้คือโค้ด C# ล้วนๆ)
- ไม่สมมติ - มันทำให้สันนิษฐานว่าโค้ดที่คอมไพล์ในขณะที่อยู่ใน VB ดังนั้นจึงไม่คิดว่าจะไม่พบการอ้างอิงที่ไม่สามารถแก้ไขได้
- การนำเข้าแบบสากล - นำเข้าทุกโมดูลโค้ด เช่นเดียวกับที่ VB6 ทำโดยอัตโนมัติ ทำให้ Visual Studio ทำหน้าที่ตัดสินใจว่าจะใช้อันไหนง่ายๆ โดยการเพิ่มประสิทธิภาพการนำเข้าหลังการแปลง
- C# 2017 - นี่คือผู้มาสาย ไม่เคยมีโซลูชั่นฟรีแวร์สำหรับ VB6 -> C# มาก่อน และตอนนี้ VB.NET ก็ถูกยกเลิกไม่มากก็น้อย ทำไมจะไม่ได้ล่ะ?
ปัญหาที่ทราบ (v1 เท่านั้น)
- ในปัจจุบัน ตัวแปลงมักจะหยุดที่ไฟล์ที่มีคำว่า 'คุณสมบัติ' ที่ใดก็ได้ในนั้น (นอกเหนือจากการประกาศคุณสมบัติ) แม้ว่านี่จะเป็นความเจ็บปวดและมีแนวโน้มที่จะได้รับการแก้ไข แต่กลับพบว่ามีประโยชน์เมื่อสิ้นสุดโครงการ (และด้วยเหตุนี้จึงไม่อยู่ในรายการซ่อมแซมอย่างเร่งด่วน) และเป็นจุดที่ขัดขวางความคืบหน้า ตัวแปรที่มีคำว่า '...ทรัพย์สิน' ถูกเปลี่ยนชื่อชั่วคราวเป็นบางอย่างเช่น '...Prppty' จากนั้นเปลี่ยนกลับในไฟล์ที่แปลงแล้ว
- ปัญหานี้ได้รับการแก้ไขแล้วในเวอร์ชัน 2 อย่างไรก็ตาม อาจยังคงปรากฏในบางกรณีในเวอร์ชัน 1
ด้านล่าง
- สิ่งนี้จะไม่สร้างโค้ดที่จะคอมไพล์ในรูปแบบที่สร้างขึ้น ไมล์สุดท้ายคือระยะทางที่แพงที่สุดในการดำเนินการอัตโนมัติ และมักจะดีที่สุดหากดำเนินการด้วยตนเอง ดูเหมือนจะเป็นการสมควรมากกว่าที่จะทำบางสิ่งบางอย่างให้ได้ประโยชน์สูงสุด และทำ Edge Case หรือการแปลงขั้นสุดท้ายด้วยมือให้เสร็จ
- การปรับแต่ง UI ที่จำกัด (แต่การปรับแต่งตามโค้ดที่ไร้ขีดจำกัด) นี่ไม่ใช่โซลูชันที่ปรับแต่งได้มากที่สุด เว้นแต่ว่าคุณต้องการเจาะลึกซอร์สโค้ดเล็กๆ น้อยๆ บนตัวแปลง แต่นั่นคือเหตุผลว่าทำไมมันถึงใช้ได้
- เอาต์พุตที่ไม่เป็นขุย รหัสผลลัพธ์จะยุ่งเหยิงอย่างมีสไตล์ นั่นคือสิ่งที่ IDE สมัยใหม่มีไว้เพื่อ การจัดรูปแบบที่ไม่ดีทั้งหมดสามารถล้างได้ด้วย ^K^D การนำเข้าที่ไม่ได้ใช้ด้วย ^K^E และมี {'s และ } พิเศษอีกมากมายที่คุณอาจต้องการลบ
- ปัจจุบันตัวแปลงนั้นแย่มากที่ขอบเขตของวง ขออภัย นี่เป็นหนึ่งในข้อผิดพลาดของการแปลง VB6->C# และไม่มีเหตุผลมากนักในการแปลง มันน่าเบื่อ แต่ทำการค้นหาลูปทั้งหมดทั่วทั้งโปรเจ็กต์และตรวจสอบขอบเขตด้วยตนเอง
- มีวิธีพิเศษสำหรับทุกกิจกรรม หนึ่งอันสำหรับลายเซ็นที่ถูกต้อง หนึ่งอันสำหรับลายเซ็นต้นฉบับ ในกรณีส่วนใหญ่ ความซ้ำซ้อนนั้นไม่จำเป็น แต่ให้การแปลงที่ง่ายที่สุด ในกรณีส่วนใหญ่สามารถลดสิ่งเหล่านี้ให้เหลือวิธีเดียวได้ (แต่ไม่ใช่ทั้งหมด ซึ่งเป็นสาเหตุที่ฉันไม่ทำ)
หมายเหตุ: สถานที่ส่วนใหญ่ที่ตัวแปลงรู้ว่าจะมีปัญหา โดยจะใส่คำอธิบายประกอบโค้ดด้วย // TODO: ความคิดเห็น อย่าลืมพูดถึงสิ่งเหล่านี้อย่างละเอียด
ข้อดี
- ได้ฟรี
- คุณมีแหล่งที่มา (ปรับแต่งอะไรก็ได้)
- ทำทั้งหมดหรือเพียงไฟล์เดียวในแต่ละครั้ง
- ดีกว่าการทำด้วยมือทั้งหมดมาก
- มันจะทำให้คุณมีข้อมูลเชิงลึกที่ดีเกี่ยวกับสิ่งที่เกิดขึ้น โดยไม่ต้องลงแรงด้วยตนเองเพื่อทำการแปลงแบบง่ายๆ
- ไม่ใช่การแปลงที่เร็วที่สุด แต่เป็นการแปลงที่ตรงไปตรงมา (แต่ v2 ดีขึ้นมาก) ตรวจสอบฟังก์ชันต่างๆ เช่น
ConvertSub หรือ ConvertPrototype- แต่ลองคิดดูสิ... คุณกำลังมองหาการแปลงในครั้งเดียว ไม่ใช่ทำงานซ้ำแล้วซ้ำเล่าระหว่างการดำเนินการแปลง
- ช่วยให้สามารถตรวจสอบวิธีการแปลงบางสิ่งได้ ไม่ชอบผลลัพธ์ใช่ไหม เปลี่ยนมัน.
- คุณสามารถวางเบรกพอยต์ VB6 ได้ทุกที่ที่คุณต้องการและหยุด นอกจากนี้ เพียงเพิ่มบรรทัดเช่น
If LineN = 387 Then Stop แล้วตัวแปลงจะหยุดอยู่ตรงนั้น
บริการพิเศษ
- โค้ด linter VB6
?Lint . ขจัดหนี้เทคโนโลยีให้ได้มากที่สุดก่อนที่จะเริ่มกระบวนการด้วยซ้ำ - แปลง VB6 เป็น XAML
ความเป็นไปได้ในอนาคต
โครงการส่วนใหญ่เป็นไปตามที่เป็นอยู่ มันทำงานในสิ่งที่มันทำ อย่างไรก็ตาม มีบางสิ่งที่ต้องจับตาดู เช่น "คุณสมบัติส่วนขยาย" หาก C# เคยใช้งานสิ่งนี้หรืออะไรทำนองนี้ การแปลง .Visible = True จะตรงไปตรงมามากขึ้น เนื่องจากตอนนี้ C# ใช้ enum แทนที่จะเป็นบูลีน จึงเป็นไปไม่ได้ แต่จะใช้ด้วยฟีเจอร์นี้
ติดต่อ
- หากคุณมีคำถาม ข้อกังวล หรือเพียงต้องการคำแนะนำสั้นๆ โปรดเปิดประเด็นได้เลย ฉันไม่สามารถรับประกันได้มาก แต่ฉันพยายาม!