您的位置:首页 > 其它

.net中调用com的具体操作(总结)

2004-11-17 16:22 405 查看
获得某个com实例的接口地址(知道此实例的具体接口)

IntPtr ppv = Marshal.GetComInterfaceForObject( this.m_view, typeof(HelperItems.IShellView) );

获得某个com实例的接口地址(不知道此实例的具体接口)

IntPtr iunkMe = Marshal.GetIUnknownForObject(this);

通过riid,获得具体的接口地址

Marshal.QueryInterface( iunkMe, ref riid, out ppv );

从某个com实例的接口地址获得这个实例

HelperItems.ICommDlgBrowser cdlg = (HelperItems.ICommDlgBrowser) Marshal.GetObjectForIUnknown( Marshal.GetComInterfaceForObject(this.m_view.m_shell, typeof(HelperItems.ICommDlgBrowser)) );

注意 获取对象的某种接口指针 可以在marshal.queryinterface和mashal.getcominterfaceforobject中间选择

此方法成功 ppv = Marshal.GetComInterfaceForObject(dropHandle, typeof(IDropTarget));

此方法没有成功 Marshal.QueryInterface(iunkDropHandle, ref guidIDropTarget, out ppv)

将传入的结构指针所指结构拷贝到管理代码中来

        Dim videoHeader As VIDEOHDR = New VIDEOHDR

        videoHeader = CType(GetStructure(lpVHdr, videoHeader), VIDEOHDR) ' lpVHdr是传入的结构指针

    Public Shared Function GetStructure(ByVal ptr As IntPtr, ByVal struc As ValueType) As Object

        Return Marshal.PtrToStructure(ptr, struc.GetType())

    End Function
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: