2012-02-13 8 views
1

現在のプロジェクトはすべてVC6VB6で書かれています。 .Netは、MFC用のActive Xコントロールを記述できることが証明されています。だから、レガシーコードの変更を最小限に抑えて.Netを使っていくつかのアクティブなxコントロールを書いてみたい。ここでC#でActiveXコントロールを書きますが、MFCで使用します

要件です:

  1. (VC6で書かれた)ホストアプリケーション登録カテゴリからアクティブXコントロールを見つけて読み込むことができなければなりません。
  2. アクティブxコントロールは、プロパティページをサポートする必要があります。
  3. アクティブxコントロールは、プロパティの永続性をサポートする必要があります。

    1. それがネットのWinFormコントロールを使用してActive Xプロパティページを書き込むことができる:ここで

    は私質問のですか?どのようにC#でコントロールと対応するプロパティ間で通信するのですか?

  4. C#の特定のカテゴリでActive Xコントロールを登録するにはどうすればよいですか?以下は、登録を制御するためのMFCのサンプルコードです。

    STDAPI DllRegisterServer(void) 
    { 
    
    HRESULT hr; 
    
    AFX_MANAGE_STATE(_afxModuleAddrThis); 
    
    if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid)) 
        return ResultFromScode(SELFREG_E_TYPELIB); 
    
    if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE)) 
        return ResultFromScode(SELFREG_E_CLASS); 
    
    hr = CreateComponentCategory(CATID_CTRL_CAT, 
        L"XXXX"); 
    if (FAILED(hr)) 
        return hr; 
    
    hr = RegisterCLSIDInCategory(CATID_CONTROL, 
        CATID_CTRL_CAT); 
    if (FAILED(hr)) 
        return hr; 
    
    return NOERROR; 
    } 
    

    上記登録は3つの段階、AfxOleRegisterTypeLibCreateComponentCategoryRegisterCLSIDInCategoryを有しています。どのようにC#でそれらを実装できますか?

  5. プロパティの永続化を達成するためにC#と同等の方法は何ですか?

ご意見ありがとうございました!!!

答えて

2

レガシーアプリケーションで使用する.NET ActiveXコンポーネントを作成しなければならず、最初はC#で実装する方法を検討しました。 C#では、ActiveXコンポーネントの最新の定義(つまりCOM IUnknownインターフェイスの実装)を満たすための最小限の機能を実装することは難しくありませんが、C#ですべてのドラッグ&ドロップをサポートするコンポーネントを構築します私のコンポーネントを消費するレガシーアプリケーション開発者が期待する使いやすさは、多くの追加のCOMインターフェイスを実装する必要がありました。

正しいCOMインターフェイスをインポートしてコンポーネント内で適切に実装すれば、C#でこれを行うことは技術的に可能です。これは多くの作業になります。

実際のロジックをすべて含む通常のC#コンポーネント(ActiveXは関係ありません)を作成してから、必要なものを提供するためにMFCを使用するC#コンポーネントの周りにC++/CLI(AKA Managed C++) ActiveXの機能

免責事項:私はプロパティページやプロパティの永続性を扱う必要はありませんでした。

+0

これは、ミックスMFCとマネージC++コードが私の要件を満たすかもしれないという別の考え方です。どうもありがとうございます! – james

+0

ミックスMFCと管理されたC++は私の望むアプローチになるでしょう。ホストアプリケーションはclrサポートで再コンパイルする必要がありますが、はるかに簡単です。再度、感謝します。 – james

+0

@james - あなたの状況にこの方向性が実行可能であるとうれしいです。あなたは、 "ホストアプリケーションはclrサポートで再コンパイルする必要があります"と言った。私はそれを理解するかどうか分からない。私の場合は、自分のソリューションにMFC ActiveXプロジェクトを作成しました。このプロジェクトには、.NETコンポーネント用のActiveXラッパーが含まれていたため、プロジェクトをCLRサポートでコンパイルする必要がありました。ただし、ホストアプリケーション(ActiveXコントロールを使用するGUIアプリケーション)は.NETを意識する必要はありません。 –

関連する問題