現在のプロジェクトはすべてVC6とVB6で書かれています。 .Netは、MFC用のActive Xコントロールを記述できることが証明されています。だから、レガシーコードの変更を最小限に抑えて.Netを使っていくつかのアクティブなxコントロールを書いてみたい。ここでC#でActiveXコントロールを書きますが、MFCで使用します
は要件です:
- (VC6で書かれた)ホストアプリケーション登録カテゴリからアクティブXコントロールを見つけて読み込むことができなければなりません。
- アクティブxコントロールは、プロパティページをサポートする必要があります。
- アクティブxコントロールは、プロパティの永続性をサポートする必要があります。
- それがネットのWinFormコントロールを使用してActive Xプロパティページを書き込むことができる:ここで
は私質問のですか?どのようにC#でコントロールと対応するプロパティ間で通信するのですか?
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つの段階、AfxOleRegisterTypeLib、CreateComponentCategoryとRegisterCLSIDInCategoryを有しています。どのようにC#でそれらを実装できますか?
- プロパティの永続化を達成するためにC#と同等の方法は何ですか?
ご意見ありがとうございました!!!
これは、ミックスMFCとマネージC++コードが私の要件を満たすかもしれないという別の考え方です。どうもありがとうございます! – james
ミックスMFCと管理されたC++は私の望むアプローチになるでしょう。ホストアプリケーションはclrサポートで再コンパイルする必要がありますが、はるかに簡単です。再度、感謝します。 – james
@james - あなたの状況にこの方向性が実行可能であるとうれしいです。あなたは、 "ホストアプリケーションはclrサポートで再コンパイルする必要があります"と言った。私はそれを理解するかどうか分からない。私の場合は、自分のソリューションにMFC ActiveXプロジェクトを作成しました。このプロジェクトには、.NETコンポーネント用のActiveXラッパーが含まれていたため、プロジェクトをCLRサポートでコンパイルする必要がありました。ただし、ホストアプリケーション(ActiveXコントロールを使用するGUIアプリケーション)は.NETを意識する必要はありません。 –