我想要做一些Internet Explorer自動化任務,它需要我使用IViewObject。什麼是IViewObject?我在哪裏可以找到它的定義?什麼是IViewObject和它如何在C#中使用
我一直在谷歌和我發現的一切有不同的接口定義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。所以我的下一個問題是,需要引用哪些程序集來使用這些類型?
它是如何有很多不同的實現呢? Microsoft.VisualStudio.Ole.Interop具有與System.Windows.Forms.UnsafeNativeMethods中使用的IViewObject不同的實現。 – 2009-09-17 14:27:36
不同之處在於託管類型和非託管類型之間的映射細節,它們在編譯時未經過驗證。一般來說,可能有不止一種方式來剝皮/調用貓,但至少有一些可能的方法可能在至少一些情況下被炸。例如,如果非託管方法返回64位整數,但您的p/invoke聲明將返回類型聲明爲32位整數,那麼您的調用將一直運行,直到您點擊的值過大,位整數。 – 2009-09-17 15:43:13