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 측면과 함께 제공됩니다. 자유롭게 혼합하여 일치시키고 전체 프로젝트를 하나로 변환한 다음 개별 파일을 다른 것으로 변환하십시오. 완전히 다른 두 가지 접근 방식을 사용하면 둘 중 하나가 다른 것보다 더 잘 작동하고 작업량이 줄어들기를 바랍니다. 다시 말하지만 둘 다 여전히 80-90%의 전환율에 불과합니다. 직접 수행하고 다시 확인해야 하는 작업(예: 루프 경계)이 많이 있지만 VB6 코드의 모든 &
s를 C#의 경우 +
s로 변경하는 것보다 확실히 더 좋습니다.
나는 어떻게 ...?
전환에 관해 많은 질문이 있습니다. 이 변환기가 특정 패턴을 처리하는 방식을 알고 싶다면 어떻게 해야 합니까?를 참조하십시오. 우리 위키의 페이지.
이 변환기를 사용하는지 여부에 관계없이 우리는 일반적으로 발생하는 변환 퍼즐에 대한 솔루션을 제공합니다. 우리의 솔루션은 빠르고 정확하며 일반적으로 프로그래밍이나 컨텍스트 오버헤드를 많이 사용하지 않습니다. 확장 모듈에 의존할 수도 있지만 모두 기본 C# 코드이며 일반적으로 VB6에서 수행한 작업과 상당히 유사합니다.
요구사항
변환기 요구 사항
- 변환기는 VB6 IDE에서 실행됩니다. 변환하려는 프로그램의 IDE입니다.
변환된 프로그램 요구 사항
- Visual Studio는 상대적으로 최신 버전의 C#을 지원합니다. 아니면 대체.
- Visual Basic Power Packs / 또 다른 링크 / 며칠 동안 찾기 어려울 수 있으므로 Repo에 제공됨
-
Mid
, Trim
, Abs
, DateDiff
등과 같은 표준 VB 함수를 C# 코드에서 직접 사용할 수 있습니다. - 타사 블랙박스 라이브러리 없이 VB6 기능(
Format
... 제외)과 99.9% 호환성을 보장합니다(MS 제품이므로 자사 블랙박스임). - 일단 변환되고 실행되면 반복하기가 쉽습니다.
지침
사용법에 대한 자세한 내용은 위키를 참조하세요.
디자인 고려 사항
- 단순 - 100% 변환을 수행하도록 설계되지 않았습니다. 아마도 80% - 90%의 그런 일이 있을 것입니다.
- VB6 기반 - 왜 안 되겠습니까? 어쨌든 FROM vb6을 변환하려면 작동하는 VB6 컴파일러가 있어야 합니다.
- 사용자 정의 - 개인 프로젝트를 위해 생성되었으므로 사용 사례에 맞게 특별히 맞춤화되었습니다. 그러나 누군가가 논리를 조사하고 자신의 문제에 맞게 조정할 수 없는 이유는 없습니다.
- 기회주의적 - 이 코드는 VB6 IDE의 상대적 균일성에 크게 의존합니다.
- 간격은 IDE에서 시행하기 때문에 상대적으로 일관됩니다.
- 키워드 대문자 사용이 보장될 수 있습니다.
- 우리는 Microsoft Power Pack을 활용하므로 대부분의 핵심 VB6 명령문을 변환할 필요가 없습니다. 또한 VB에서와 마찬가지로
DateDiff
, Left
, Trim
과 같은 문을 계속 사용할 수 있습니다. 또는 원하는 경우 변환 후 마이그레이션을 시작하세요. 우리는 호환성을 최대화하기 위해 단순히 Microsoft 라이브러리를 가져오므로 대규모 문자열 대체 라이브러리가 없으며 일부 변환기만큼 우리 자체 DLL 또는 라이브러리에 크게 의존하지도 않습니다(구문의 용이성을 위해 몇 가지를 생성하지만 최종 결과는 순수 C# 코드입니다.)
- Non-assuming - VB에서 컴파일된 코드를 가정하므로 확인할 수 없는 참조가 발견되지 않을 것이라고 가정하지 않습니다.
- 범용 가져오기 - VB6이 자동으로 수행한 것처럼 모든 코드 모듈을 가져옵니다. 변환 후 가져오기를 최적화하여 Visual Studio에서 사용할 항목을 결정하는 작업을 수행하도록 합니다.
- C# 2017 - 이것은 후발주자입니다. VB6 -> C#에 대한 프리웨어 솔루션은 없었는데 이제 VB.NET이 어느 정도 중단되었습니다. 왜 안 될까요?
알려진 문제(v1만 해당)
- 현재 변환기는 '속성'이라는 단어가 포함된 파일(속성 선언 제외)을 종종 보류합니다. 이는 고통스럽고 수정될 가능성이 높지만 프로젝트 유용성이 끝날 무렵에 발생했으며(따라서 수리 목록에서 긴급하지 않음) 진행을 방해하는 경우 '...Property'라는 단어가 포함된 변수 일시적으로 '...Prppty'와 같은 이름으로 이름이 변경된 다음 변환된 파일에서 다시 변경되었습니다.
- 이 문제는 버전 2에서 해결되었지만 일부 경우 v1에서도 여전히 나타날 수 있습니다.
단점
- 이렇게 하면 생성된 형식으로 컴파일되는 코드가 생성되지 않습니다. 라스트 마일은 자동화하는 데 가장 비용이 많이 들고, 수동으로 수행하는 것이 가장 좋은 경우가 많습니다. 무언가를 최대한 활용하고, 극단적인 경우나 최종 변환을 수동으로 완료하는 것이 더 편리해 보였습니다.
- 제한된 UI 사용자 정의(그러나 무제한 코드 기반 사용자 정의). 이는 가장 맞춤화 가능한 솔루션이 아닙니다. 물론, 변환기의 간단한 소스 코드를 자세히 살펴보고 싶지 않은 경우는 예외입니다. 그러나 이것이 가능한 이유입니다.
- 린트되지 않은 출력. 결과 코드는 스타일적으로 엉망입니다. 이것이 바로 현대 IDE의 목적입니다. 모든 잘못된 형식은 ^K^D를 사용하여 정리할 수 있습니다. ^K^E를 사용한 미사용 수입품. 그리고 삭제하고 싶은 추가 { 및 }가 많이 있습니다.
- 변환기는 현재 루프 경계에서 정말 좋지 않습니다. 죄송합니다. 이는 VB6->C# 변환의 함정 중 하나이며 변환 방법에 대한 논리가 많지 않습니다. 지루하지만 모든 for 루프에 대해 프로젝트 전체에서 검색을 수행하고 경계를 수동으로 검사합니다.
- 모든 이벤트에는 추가 방법이 있습니다. 하나는 올바른 서명용이고 다른 하나는 원본 서명용입니다. 대부분의 경우 중복성은 불필요하지만 가장 쉬운 변환을 제공했습니다. 대부분의 경우 이러한 방법은 단일 방법으로 축소될 수 있습니다(그러나 전부는 아니므로 그렇게 하지 않습니다).
참고: 변환기가 문제가 있음을 알고 있는 대부분의 위치에는 // TODO:
주석으로 코드에 주석이 추가됩니다. 이들 각각을 철저하게 해결하십시오.
플러스
- 그것은 무료입니다.
- 소스가 있습니다(사용자 정의 등).
- 전체 작업을 수행하거나 한 번에 하나의 파일만 수행하십시오.
- 모든 것을 손으로 하는 것보다 훨씬 낫습니다.
- 간단한 변환을 수행하기 위해 수동으로 노력할 필요 없이 무슨 일이 일어나고 있는지에 대한 좋은 통찰력을 제공합니다.
- 가장 빠른 변환은 아니지만 매우 간단한 변환입니다(그러나 v2는 훨씬 더 좋아졌습니다).
ConvertSub
또는 ConvertPrototype
과 같은 함수를 검사합니다.- 하지만 생각해 보세요... 변환 실행 중에 반복해서 실행하는 것이 아니라 일회성으로 변환하려고 합니다.
- 무언가가 어떻게 변환되고 있는지 검사할 수 있습니다. 출력이 마음에 들지 않습니까? 변경하세요.
- 원하는 곳에 VB6 중단점을 두고 중지할 수 있습니다. 또한
If LineN = 387 Then Stop
과 같은 줄을 추가하면 변환기가 바로 중지됩니다.
엑스트라
- VB6 코드 린터.
?Lint
. 프로세스를 시작하기도 전에 기술 부채를 최대한 근절하세요. - VB6 양식을 XAML로
미래의 가능성
프로젝트는 대체로 현재 상태입니다. 그것은 그것이하는 일에 작동합니다. 그러나 주의해야 할 몇 가지 사항은 "확장 속성"과 같은 것입니다. C#에서 이것 또는 이와 유사한 것을 구현한 경우 .Visible = True
변환하는 것이 훨씬 더 간단해집니다. C#에서는 이제 부울 대신 열거형을 사용하기 때문에 이는 불가능하지만 이 기능을 사용하면 가능합니다.
연락하다
- 질문이나 우려 사항이 있거나 간단한 지침이 필요한 경우 언제든지 이슈를 열어주세요. 많은 것을 보장할 수는 없지만 노력하겠습니다!