PowerBuilder (10 または 11.5) から .NET dll を参照しようとしている場合、次のうちどれがベスト プラクティスですか?
1) dll を COM オブジェクトとして登録し、OleObject を介して COM オブジェクトを使用する 2) 11.5 にアップグレードし、PB.NET に変換して、実際に PowerBuilder コードに C# のブロックを含めることができるようにする 3) 別の方法
これらのアプローチで注意すべき点は何ですか?
PowerBuilder (10 または 11.5) から .NET dll を参照しようとしている場合、次のうちどれがベスト プラクティスですか?
1) dll を COM オブジェクトとして登録し、OleObject を介して COM オブジェクトを使用する 2) 11.5 にアップグレードし、PB.NET に変換して、実際に PowerBuilder コードに C# のブロックを含めることができるようにする 3) 別の方法
これらのアプローチで注意すべき点は何ですか?
注意事項:
最初のアプローチ (COM ラッパー) は、Win32 アプリケーションのみを作成する場合に、11.5 以降を含む、PowerBuilder の任意のバージョンで機能します。ただし、実際にできることにはいくつかの制限があります。アセンブリは、COM 可視としてマークする必要があります。呼び出すメソッドは public である必要があります。メソッドが過負荷になっていると、後でバージョン管理の問題が発生する可能性があります。例外も問題です。詳細な例外情報を取得するには、.Net 側にフック メカニズムを実装する必要があります。
2 番目の方法では、11.5 以降が必要になるだけでなく、アプリケーションを .Net ターゲット タイプ (WinForm など) の 1 つとしてコンパイルする必要もあります。WinForm としてのコンパイルをサポートするために、他の変更を加える必要があるかもしれないことを考えると、この 1 つのアセンブリを呼び出せるようにするだけでも、少し手間がかかることに気付くかもしれません。一方、.Net ターゲットに向かっている場合は、設定済みです。
私は実際に現在同じ問題に直面しています。PB 11.5 を使用していますが、この時点でアプリを .NET ターゲットに移動する方法はなく、.NET の処理 (PowerScript#...) はネイティブ PB アプリでは不可能です。そこで、現地のサポートにアドバイスを求めたところ、Sybase の推奨事項は PBNI を使用することであるとの回答がありました。
CodeExchangeの Roy Kiesler による PB2DOTNETと呼ばれる良いサンプル プロジェクトがあります。最初のいくつかの手順をスキップするのに役立ちます (コードは新しいものではないことに注意してください。ネイティブの PB と PBNI の両方を移行する必要があります)。
このアプローチの欠点は、維持しなければならない中間レベルが追加されることです。ただし、PBNI クラスは、PB12 にアップグレードするとすぐに PBNI 部分を簡単に取り除くことができるように、.NET クラスのシン ラッパーにすぎません。