4

PB オブジェクトと .NET (C#) オブジェクトの間で双方向通信を行う方法を探しています。Brad の GUI コントロールの .NET バージョンを見ると、.NET オブジェクトに PB オブジェクトへの参照を与える方法がわかります。しかし、その例では、(基本的に) PowerObject としてキャストされています。その C# コードは、PB オブジェクトで TriggerEvent() のみを呼び出します。

C# で foo1 というカスタム クラスを作成したいと考えています。foo1 に bar1() というメソッドを作成したいと考えています。

PB で foo2 というカスタム クラスを作成したいと考えています。foo2 に bar2() というメソッドを作成したいと考えています。

foo2 内に foo1 のインスタンスを作成できるようにしたいと考えています。foo2 内から foo1.bar1() を呼び出せるようにしたい。

(私はここまで元気です。)

foo1 内から foo2 を参照できるようにしたい。foo1 内から foo2.bar2() を呼び出せるようにしたい。

4

3 に答える 3

1

ここからのアイデアを使用して C# コントロールを作成し、PB と Qt から呼び出されて動作しました。

Windows フォームを ActiveX コントロールとして公開する

P/Invoke も参照してください。

于 2009-06-02T17:44:18.870 に答える
0

PowerBuilder(バージョン6、7、および8.0)は、異なるテクノロジで記述されたオブジェクトを接続する場合にのみ、BINARYコントラクトを正しく理解します。実際には、IDispatchインターフェイス(いわゆるOleAutomation)を備えたCOMオブジェクトを意味します。これは、VB6やjscript(wscriptを使用)などのインタプリタ言語で使用できるのと同じ種類のオブジェクトです。

オブジェクト間で非同期通信を行うためにConnectionPointsを処理する必要はありません。独自の通常のインターフェースを使用してください。

WatcomC++コンパイラを使用して「プロキシオブジェクト」を構築しないでください。数年前は非常に弱いコンパイラでした。いくつかのソリューションをコンパイルしてビルドしようとしましたが、コンパイル中に多くの内部エラーが表示されました。MSC++コンパイラは問題なくコンパイルを実行しました。

オブジェクトはアパートと互換性がある必要があることを忘れないでください。PBはSTA(シングルスレッドアパートメント)のみを使用します。確認してください。最近何かが変わった可能性があります。

于 2009-05-27T20:11:29.030 に答える
0

これを行うにはもっと賢明な方法があると確信していますが、COMを使用するのが最も簡単かもしれません。

COMは決して正しい答えではないと言う人もいますが、私は適切な仕事に適切なツールを使用すると言います。

于 2009-05-22T15:02:37.873 に答える