2012-02-10 3 views
0

Я пишу приложение в 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# - любые идеи?

ответ

0

Это вряд ли будет проблемой с OleCreatePropertyFrameIndirect. Скорее всего, сама страница свойств (и/или фильтр источника) имеет проблемы и закрывается, генерирует исключение, генерирует нарушение доступа и т. Д.

+0

Да, возможно, хотя hr возвращает ноль, поэтому не уверен, куда идти оттуда – Sean

+0

Это возвращает ноль, потому что ошибка внутренне улавливается листом свойств. И это может быть даже не ошибка на первом месте - подумайте о странице свойств, вызывающей [по какой-то странной причине] 'EndDialog' на своем листе хостинга. –

+0

Некоторые другие программы, которые я видел, могут получить доступ к странице свойств, пока она работает, поэтому это возможно. Вызов косвенного метода был о единственном, о чем я мог думать. – Sean

Смежные вопросы