.NET互操作技术社区 P/Invoke, C++/COM Interop

分享.NET互操作技术 —— P/Invoke, C++ Interop和COM Interop
欢迎光临 .NET互操作技术社区 P/Invoke, C++/COM Interop 登录 | 注册 | 帮助
in 搜索

【推荐】一篇用C++/CLI讲述在托管委托(delegate)和非托管函数指针之间相互转化的文章

本主题共有 0 篇回复,最新回复发表于 05-27-2009, 14:47,作者 小崔爱自由
帖子排序: 上一主题 下一主题
  •  05-27-2009, 14:47 40

    【推荐】一篇用C++/CLI讲述在托管委托(delegate)和非托管函数指针之间相互转化的文章

    我们的图书《精通.NET互操作》出版有一个月的时间了,有一些朋友会想我请教一些问题。并反馈说,没有专门详细地介绍有关用委托实现函数指针、回调函数的章节。我觉得大家的建议很有道理。现在这里做个记号,挖个坑。

    之所以推荐这篇文章是有两个原因:

    1. 它介绍了在托管委托和非托管函数指针,回调函数之间相互转换的方法

    2. 它使用C++/CLI实现了对整个问题的描述。因为网络上有关C++ Interop的相关资料很少。所以值得一看

    Marshalling native function pointers

    我读后,发现作者主要强调了以下几点:

    1.在定义托管委托(delegate)的时候,可以使用UnmanagedFunctionPointer属性(Attribute)指定CallingConvention,以使其托管签名与非托管函数定义相匹配。

    2.使用System.Runtime.InteropServices.Marshal类的方法实现托管委托和非托管函数指针之间的封送。

    • Marshal.GetFunctionPointerForDelegate方法,用于将托管委托转化为非托管代码可以调用的方法。
    • Marshal.GetDelegateForFunctionPointer方法,用于将非托管函数转化为托管委托。

    3.垃圾回收器(GC)对封送委托到非托管代码时的影响。由于委托(delegate)和由委托转化成的函数指针处于不同的堆上。所以一定要保证非托管代码执行过程中,托管对象没有被回收。

    希望大家觉得有用。

以 XML 格式显示 RSS 新闻订阅源
Powered by Community Server (Personal Edition), by Telligent Systems