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

获得某个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

转载于:https://www.cnblogs.com/philip_xu/archive/2004/11/17/64830.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值