什么是IViewObject以及如何在C#中使用它

时间:2009-09-17 11:19:28

标签: c# interop

我正在尝试做一些Internet Explorer自动化任务,它要求我使用IViewObject。什么是IViewObject?我在哪里可以找到它的定义?

我一直在google-ing,我找到的所有内容都有不同的IViewObject接口定义。不同的方法或不同的参数进入相同的方法。

我如何知道要使用Internet Explorer的接口定义?

这是我在pinvoke.net

上找到的一个定义
[GuidAttribute( "0000010d-0000-0000-C000-000000000046" )]
[InterfaceTypeAttribute( ComInterfaceType.InterfaceIsIUnknown )]
[ComImportAttribute()]
public interface IViewObject
{
    void Draw( [MarshalAs( UnmanagedType.U4 )] int dwDrawAspect, int lindex, IntPtr pvAspect, DVTARGETDEVICE ptd, IntPtr hdcTargetDev, IntPtr hdcDraw, COMRECT lprcBounds, COMRECT lprcWBounds, IntPtr pfnContinue, int dwContinue );
    int GetColorSet( [MarshalAs( UnmanagedType.U4 )] int dwDrawAspect, int lindex, IntPtr pvAspect, DVTARGETDEVICE ptd, IntPtr hicTargetDev, out tagLOGPALETTE ppColorSet );
    int Freeze( [MarshalAs( UnmanagedType.U4 )] int dwDrawAspect, int lindex, IntPtr pvAspect, out IntPtr pdwFreeze );
    int Unfreeze( [MarshalAs( UnmanagedType.U4 )] int dwFreeze );
    int SetAdvise( [MarshalAs( UnmanagedType.U4 )] int aspects, [MarshalAs( UnmanagedType.U4 )] int advf, [MarshalAs( UnmanagedType.Interface )] IAdviseSink pAdvSink );
    void GetAdvise( [MarshalAs( UnmanagedType.LPArray )] out int[] paspects, [MarshalAs( UnmanagedType.LPArray )] out int[] advf, [MarshalAs( UnmanagedType.LPArray )] out IAdviseSink[] pAdvSink );
}

我会尝试这个定义,但我得到一些未知的类型:DVTARGETDEVICE,COMRECT,tagLOGPALETTE。所以我的下一个问题是,需要引用哪些程序集才能使用这些类型?

1 个答案:

答案 0 :(得分:3)

DVTARGETDEVICE和COMRECT是结构。你可以在pinvoke.net上找到他们的定义。

tagLOGPALETTE是一个类。 http://blogs.msdn.com/vsod/archive/2008/11/01/resizing-the-embedded-ole-objects-using-net.aspx有一个样本。

此外,IViewObject和三个引用的类型都由.NET Framework内部使用。如果您自己获取Reflector(http://www.red-gate.com/products/reflector/)的副本,则可以在System.Windows.Forms.UnsafeNativeMethods中查看现有实现。