2012-02-10 7 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

関連する問題