Организованное агрегирование COM

Это - мое понимание, создающее COM-объект, агрегировавший существующий COM-объект, подразумевает логику перенаправления реализации в IUnknown. Метод QueryInterface внешнего объекта.

Вопрос, который я имею, состоит в том, как сделать это, если объектом, который Вы создаете, управляют. На управляемых объектах IUnknown не является явно реализованным COM Interop, делает это для Вас. Таким образом, как я говорю COM Interop, что объект, который я создаю, является агрегированием другого COM-объекта?

До сих пор единственный способ, которым я нашел, состоит в том, чтобы реализовать все интерфейсы внутреннего объекта на внешнем и явно перенаправить их. Это ужасно b) a) ужасный и b) предполагает, что Вы знаете, что все интерфейсы реализуют, который не имеет место в моей ситуации.

Какие-либо мысли?

5
задан Randy supports Monica 3 January 2010 в 05:36
поделиться

1 ответ

[

] Если вы используете .NET 4, то вы можете использовать []ICustomQueryInterface[] для переопределения логики по умолчанию []IUnknown.QueryInterface[]. На CodePlex есть []образец для агрегации COM[] - реализация довольно проста:[

]. [
CustomQueryInterfaceResult ICustomQueryInterface.GetInterface(ref Guid iid, out IntPtr ppv)
{
    if(iid.Equals(new Guid("00000000-0000-0000-0000-000000001234")))
    {
        ppv = Marshal.GetComInterfaceForObject(this.innerObject, typeof(IInnerInterface), CustomQueryInterfaceMode.Ignore);
        return CustomQueryInterfaceResult.Handled;
    }
    ppv = IntPtr.Zero;
    return CustomQueryInterfaceResult.NotHandled;
}
]
7
ответ дан 14 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: