0

2 つのプロジェクトがあります。- /clr を使用するように設定されたいくつかのプロジェクト ファイルを使用して C++ で記述された私のアプリケーション - いくつかのフォームを含む私の C# WPF コントロール ライブラリ

C++ アプリケーションでは、C# dll からフォームを読み込んで STAThread に表示し、バックグラウンドで他のネイティブ処理を実行します。

C++ アプリケーションで C# フォームからフォーム イベントを処理したいと考えています。フォームを起動するためのコードは次のとおりです。

using namespace System::Windows;
using namespace System::Windows::Controls;
using namespace MyProject::Interface::Views;

public ref class MyProjectApplication : public Application
{
};

[STAThread]
void ManagedMain()
{
    CLILicenseView^ winLicenseAgreement = gcnew CLILicenseView();

    MyProjectApplication^ MyProjectCLI = gcnew MyProjectApplication();
    MyProjectCLI->Run(winLicenseAgreement);
}

私の元のフォームは「License.xaml」と呼ばれ、イベントの処理に役立つかもしれないと思ったので、それを継承してイベントをオーバーライドしようとしましたが、何をしているのかわかりません。

using namespace System;
using namespace System::Windows;
using namespace System::Windows::Controls;
using namespace MyProject::Interface::Views;

namespace MyProject
{
    public class CLILicenseView : License
    {
        public void CLILicenseView()
        {
            //
        }
    }
}

これが最善の方法ですか? そうでない場合、C++ アプリケーションからフォームイベント (つまり、ボタンのクリック) を処理するにはどうすればよいですか?

4

1 に答える 1

0

ここでは、継承ではなく合成が適切なツールだと思います。私が取り組んできた C++/CLI プロジェクト (クラス ライブラリのみで、UI はありません) では、ref クラスは通常、C++ ビジネス ロジックへのアンマネージ ポインターを保持します。ユーザーがビジネス ロジックとやり取りしたい場合は、マネージ メソッドを呼び出します。このメソッドは、ポインターを介してアンマネージ コードを呼び出します。あなたの場合、フォームがアンマネージ コードとやり取りしたい場合は、アンマネージ コードを呼び出してコールバックする必要がMyProjectApplicationあります。

于 2012-04-26T03:59:53.193 に答える