sumangvs Ответов: 1

Создание элементов управления динамически с помощью сбоев ATL в windows server 2016


У нас есть MMC Snap In Code, построенный на VS 2005. Оснастка имеет несколько страниц свойств, производных от CSnapInPropertyPageImpl<t>



Вот фрагмент кода для определения класса

класс TTreeConfigPage02 : public CSnapInPropertyPageImpl<ttreeconfigpage02>

Вот фрагмент кода, который отлично работает в Windows 10, но выходит из строя в строке

spHost->AttachControl(m_grid, m_wndGrid);


в Windows Server 2016. Он сразу же выдает ошибку. Тот же самый компонент ActiveX, когда мы добавляем статически в диалог (в диалоге -> Right clink -> Insert ActiveX Component), работает нормально.

// initialize ATL ActiveX hosting
	AtlAxWinInit();
	// create the control (will fail if not registered) IDC-> Of a Picture cotrol
	CWindow dlgWin = GetDlgItem(IDC_SELECT_GRID_HOST_FOL);  // get host window
	m_grid.CreateInstance(__uuidof(FiltFolder)); //FiltFolder is a Composite Control 
	ATLASSERT(m_grid != NULL);

	RECT rcWind;
	dlgWin.GetWindowRect(&rcWind);
	ScreenToClient(&rcWind);

	m_wndGrid.Create(m_hWnd, rcWind, NULL, WS_CHILD | WS_VISIBLE, 0, IDC_SELECT_GRID_FOL);

	// attach the control to the host window
	CComPtr<IAxWinHostWindow> spHost;
	m_wndGrid.QueryHost(&spHost);
	spHost->AttachControl(m_grid, m_wndGrid);


	IUnknown* pUnk;
	m_grid.QueryInterface(IID_IUnknown, &pUnk);

	DispEventAdvise(pUnk);






Любые мысли по этому поводу о том, почему он терпит неудачу только в Win Server 16.

Заранее спасибо

Что я уже пробовал:

Попробовал другой вариант, а также упомянутый в ссылке ниже. Ничего не получалось
https://jeffpar.github.io/kbarchive/kb/218/Q218442/

Richard MacCutchan

- Он сразу же выдает ошибку."
Пожалуйста, отредактируйте свой вопрос и добавьте полную информацию об ошибке; люди здесь не могут догадаться, что происходит.

sumangvs

Мои извинения , Ричард, но он просто вылетает с нарушением доступа. Я попробую поставить стек вызовов

sumangvs

Тем временем я создал пример диалогового приложения с поддержкой ALT и динамически создал компонент ActiveX. Это сработало отлично.

Теперь это как-то связано с MMC SnapIn ?

1 Ответов

Рейтинг:
1

Shao Voon Wong

Зарегистрировали ли вы COM-сервер/dll с помощью команды regsvr32 в Windows Server 2016?


sumangvs

да , он зарегистрирован. Как я уже упоминал, он прекрасно работает в коробке Win 10. Это как-то связано с Windows Server 2016. Я проверил возвращаемое значение m_grid.CreateInstance(__uuidof(FiltFolder)); //FiltFolder-это составной элемент управления
Он возвращает S_OK.