當前項目全部寫入VC6和VB6。已經證明.Net可以編寫用於MFC使用的Active X控件。所以我們想用遺留代碼中的最小變化來編寫一些使用.Net的活動x控件。在C#中編寫ActiveX控件,但在MFC中使用它
這裏是要求:
- 宿主應用程序(用VC6)必須能夠找到並加載從註冊類別中的Active X控件。
- 活動x控件必須支持屬性頁面。
- 活動x控件必須支持屬性持久性。
這裏是我的問題:
- 是否可以寫使用。NET的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 2012-02-14 11:12:03
混合MFC和託管C++將成爲我現在所期望的方法,因爲它對我來說顯然更容易,但主機應用程序必須用clr支持重新編譯。再次感謝。 – james 2012-02-15 10:07:47
@james - 我很高興這個方向看起來對你的情況可行。你說過,「主機應用程序必須用clr支持重新編譯」;我不確定我是否明白這一點。在我的情況下,我在我的解決方案中創建了一個MFC ActiveX項目,該項目包含我的.NET組件的ActiveX包裝,因此該項目確實需要使用CLR支持進行編譯。儘管如此,宿主應用程序(使用ActiveX控件的GUI應用程序)並不需要知道.NET。 – 2012-02-15 17:21:31