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
コンバーターの元のバージョンは、ブロックごとのアプローチで問題に取り組み、すべての論理プログラム単位を独自の文字列に分離し、それを独自に変換していました。その結果、コンバーターは複数のパスを実行し、基本的に動作が非常に遅くなりました。このアプローチを使用せず、単純にコードを上から下まで実行するようにリンターを更新した後、コンバーターが同じことを同じくらいの精度で実行できることは明らかでした。
そこで、本日、コンバータの v2 が v1 と並んで、メイン フォームのラジオ ボタンからリリースされました。自由に組み合わせて、一方でプロジェクト全体を変換し、もう一方で個々のファイルを変換することができます。 2 つのまったく異なるアプローチを使用することで、どちらかが他方よりうまく機能し、作業が少なくなることが期待されます。繰り返しになりますが、どちらもまだ 80 ~ 90% の変換にすぎません。手動で実行して再確認する必要があることはたくさんあります (ループ境界など)。しかし、繰り返しになりますが、VB6 コードのすべての&を C# の+に変更するよりも確実に優れています。
どうすれば...?
変換に関しては多くの質問があります。このコンバーターが特定のパターンを処理する方法を知りたいだけの場合は、「どうやって...?」を参照してください。私たちのウィキのページ。
このコンバータを使用するかどうかに関係なく、よく遭遇する変換パズルに対する解決策を提供します。当社のソリューションは迅速かつ要点を押さえており、通常はプログラミングやコンテキストのオーバーヘッドをあまり使用しません。彼らは私たちの拡張モジュールに依存しているかもしれませんが、それはすべてネイティブの C# コードであり、一般に、VB6 で実行したものとかなり似ています。
要件
コンバータの要件
- コンバータは VB6 IDE で実行されます。変換しようとしているプログラムの IDE です。
変換されたプログラム要件
- Visual Studio は、比較的新しいバージョンの C# をサポートしています。または代替します。
- Visual Basic Power Packs / 別のリンク / 日によっては見つけるのが難しいため、リポジトリで提供されています
Mid 、 Trim 、 Abs 、 DateDiffなどの標準 VB 関数を C# コードで直接使用できるようにします。- サードパーティのブラックボックス ライブラリ (MS から提供されているため、ファーストパーティのブラック ボックスです) を必要とせずに、VB6 の機能 (
Format ... を除く) と 99.9% の互換性を保証します。 - 変換されて稼働状態になったら、簡単に反復処理できます。
説明書
使用方法の詳細については wiki を参照してください。
設計上の考慮事項
- シンプル - 100% 変換を行うように設計されていません。たぶん、単調な作業の 80% ~ 90% くらいです。
- VB6 ベース - なぜそうではないのでしょうか?とにかく vb6 から変換する場合は、動作する VB6 コンパイラが必要です。
- カスタム - これは個人プロジェクト用に作成されたため、特に私たちのユースケースに合わせて調整されています。しかし、誰かがロジックを調査し、自分自身の問題に合わせて調整できない理由はありません。
- 便宜的 - このコードは、VB6 IDE の相対的な均一性に大きく依存しています。
- IDE によって間隔が強制されるため、間隔は比較的一定になります。
- キーワードの大文字化を保証できます。
- Microsoft Power Pack を利用しているため、コアとなる VB6 ステートメントのほとんどを変換する必要はありません。さらに、VB と同様に、
DateDiff 、 Left 、 Trimなどのステートメントを引き続き使用できます。または、必要に応じて、変換後にそれらからの移行を開始します。互換性を最大限に高めるために Microsoft のライブラリを取り込むだけなので、大規模な文字列置換ライブラリはありません。また、一部のコンバータのように独自の DLL やライブラリに大きく依存することもありません (構文を簡単にするためにいくつか生成しますが、最終結果は純粋な C# コードになります)。
- 非仮定 - コードが VB 内でコンパイルされたことを仮定するため、解決できない参照が見つからないと仮定しません。
- ユニバーサル インポート - VB6 が自動的に行ったのと同じように、すべてのコード モジュールをインポートします。変換後のインポートを最適化するだけで、どれが使用されるかを決定する作業を Visual Studio に実行させます。
- C# 2017 - これは後発です。 VB6 -> C# 向けのフリーウェア ソリューションはこれまで存在しませんでした。そして、VB.NET が多かれ少なかれ廃止された今、なぜそうしないのでしょうか?
既知の問題 (v1 のみ)
- 現在、コンバータはファイル内のどこかに (プロパティ宣言を除く) 'Property' という単語が含まれると躊躇することがよくあります。これは面倒な問題であり、修正される可能性が高いものの、プロジェクトの最後のほうで役に立ちました (したがって、修復リストでは緊急ではありません)。進捗を妨げる箇所では、「...Property」という単語を含む変数が発生しました。単に一時的に「...Prppty」のような名前に変更され、変換されたファイル内で元に戻されました。
- この問題はバージョン 2 で解決されましたが、場合によっては v1 でも依然として発生する可能性があります。
欠点
- これでは、生成された形式でコンパイルされるコードは生成されません。ラスト 1 マイルは自動化すると最もコストがかかるため、多くの場合は手動で行うのが最適です。何かをほとんど実行して、エッジケースや最終的な変換を手動で完了する方が便利であるように思えました。
- UI のカスタマイズは制限されています (ただし、コードベースのカスタマイズは無制限です)。これは最もカスタマイズ可能なソリューションではありません。もちろん、コンバーターのソース コードを少し詳しく知りたい場合は別です。しかし、だからこそ利用できるのです。
- lint なしの出力。結果として得られるコードは、スタイル的には混乱しています。それが最新の IDE の目的です。不正なフォーマットはすべて ^K^D でクリーンアップできます。 ^K^E付きの未使用輸入品。また、削除したほうがよい余分な { や } がたくさんあります。
- 現在のコンバータはループ境界が非常に悪いです。申し訳ありませんが、これは VB6 から C# への変換の落とし穴の 1 つであり、変換方法についてはあまり論理的ではありません。面倒ですが、プロジェクト全体ですべての for ループを検索し、境界を手動で検査します。
- すべてのイベントには追加のメソッドがあります。 1 つは正しい署名用、もう 1 つは元の署名用です。ほとんどの場合、冗長性は不要ですが、最も簡単な変換を提供します。ほとんどの場合、これらは 1 つの方法にまとめられます (すべてではありません。そのため、私はそうしません)。
注: コンバータは、問題が発生すると認識しているほとんどの場所で、コードに// TODO:コメントの注釈を付けます。それぞれにしっかりと取り組んでください。
プラス
- 無料です。
- ソースはあります (カスタマイズしても構いません)。
- 全体を実行するか、一度に 1 つのファイルだけを実行します。
- すべてを手作業で行うよりもはるかに優れています。
- これにより、単純な変換を手動で行う必要がなく、何が起こっているかについての十分な洞察が得られます。
- 最速の変換ではありませんが、簡単な変換です (ただし、v2 はさらに改善されました)。
ConvertSubやConvertPrototypeなどの関数を検査します。- しかし、考えてみてください...変換の実行中に何度も実行するのではなく、1 回限りの変換を求めているのです。
- 何かがどのように変換されているかを検査できます。出力が気に入らない場合は、変更してください。
- VB6 ブレークポイントを好きな場所に配置して停止できます。さらに、
If LineN = 387 Then Stopのような行を追加するだけで、コンバータはそこで停止します。
エクストラ
- VB6 コードリンター。
?Lint 。プロセスを開始する前に、技術的負債をできるだけなくしましょう。 - VB6 フォームから XAML へ
将来の可能性
プロジェクトはほぼ現状のままです。それはそれが何をするかで機能します。ただし、「拡張機能のプロパティ」などに注意が必要な点がいくつかあります。 C# がこれまたはそれに類似したものを実装したことがある場合、 .Visible = True変換はより簡単になります。現在 C# ではブール値の代わりに列挙型を使用しているため、これは不可能ですが、この機能を使用すれば可能になります。
接触
- 質問や懸念がある場合、または単に簡単なアドバイスが必要な場合は、お気軽に問題を開いてください。あまり保証はできませんが、試してみます!