IDocHostUIHandler
.NET 2.0 になり、アンマネージドとの相互変換時の変数型の定義を明確にしないと、InvalidVariant MDA メッセージが投げられるようになった。動作確認した定義は以下の通り。
using System; using System.Runtime.InteropServices; using MSHTML; namespace net.tilfin { [ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), GuidAttribute("bd3f23c0-d43e-11cf-893b-00aa00bdce1a")] public interface IDocHostUIHandler { [PreserveSig] uint ShowContextMenu( uint dwID, ref tagPOINT ppt, [MarshalAs(UnmanagedType.IUnknown)] object pcmdtReserved, [MarshalAs(UnmanagedType.IDispatch)] object pdispReserved ); void GetHostInfo(ref DOCHOSTUIINFO pInfo); void ShowUI(uint dwID, [In, MarshalAs(UnmanagedType.Interface)] IOleInPlaceActiveObject activeObject, [In, MarshalAs(UnmanagedType.Interface)] IOleCommandTarget commandTarget, [In, MarshalAs(UnmanagedType.Interface)] IOleInPlaceFrame frame, [In, MarshalAs(UnmanagedType.Interface)] Object doc); void HideUI(); void UpdateUI(); void EnableModeless(int fEnable); void OnDocWindowActivate(int fActivate); void OnFrameWindowActivate(int fActivate); void ResizeBorder(ref tagRECT prcBorder, int pUIWindow, int fFrameWindow); [PreserveSig] uint TranslateAccelerator(ref tagMSG lpMsg, ref Guid pguidCmdGroup, uint nCmdID); void GetOptionKeyPath([MarshalAs(UnmanagedType.BStr)] ref string pchKey, uint dw); void GetDropTarget( [MarshalAs(UnmanagedType.Interface)] IDropTarget pDropTarget, [Out, MarshalAs(UnmanagedType.Interface)] out IDropTarget ppDropTarget); void GetExternal([MarshalAs(UnmanagedType.IDispatch)] out object ppDispatch); [PreserveSig] uint TranslateUrl( uint dwTranslate, [MarshalAs(UnmanagedType.BStr)] string pchURLIn, [MarshalAs(UnmanagedType.BStr)] ref string ppchURLOut ); System.Windows.Forms.IDataObject FilterDataObject(System.Windows.Forms.IDataObject pDO); } }