Я пишу приложение в C#, которое должно отображать страницу свойств. У меня есть код:Как вызвать OleCreatePropertyFrameIndirect из C#
ISpecifyPropertyPages pProp = sourceObject as ISpecifyPropertyPages;
int hr = 0;
//Get the name of the filter from the FilterInfo struct
FilterInfo filterInfo;
hr = ((IBaseFilter) sourceObject).QueryFilterInfo(out filterInfo);
//DsError.ThrowExceptionForHR(hr);
if (hr == 0)
{
// Get the propertypages from the property bag
CAUUID caGUID;
hr = pProp.GetPages(out caGUID);
if (hr == 0)
{
// Create and display the OlePropertyFrame
hr = Win32.OleCreatePropertyFrame(parentWindowForPropertyPage, 0, 0,
filterInfo.achName, 1,ref sourceObject,
caGUID.cElems,
caGUID.pElems, 0, 0, IntPtr.Zero);
}
// Release COM objects
Marshal.ReleaseComObject(pProp);
Marshal.FreeCoTaskMem(caGUID.pElems);
}
... который работает отлично, если источник не работает - если источник работает окно свойств вспышки и сразу выходит. Я предполагаю, что мне нужно использовать OleCreatePropertyFrameIndirect вместо этого и вызвать его с существующим объектом, но я не могу найти никаких примеров этого, используя C# - любые идеи?
Да, возможно, хотя hr возвращает ноль, поэтому не уверен, куда идти оттуда – Sean
Это возвращает ноль, потому что ошибка внутренне улавливается листом свойств. И это может быть даже не ошибка на первом месте - подумайте о странице свойств, вызывающей [по какой-то странной причине] 'EndDialog' на своем листе хостинга. –
Некоторые другие программы, которые я видел, могут получить доступ к странице свойств, пока она работает, поэтому это возможно. Вызов косвенного метода был о единственном, о чем я мог думать. – Sean