利用 C++ Interop 封装 ISO C++ 对象, 供其他 .Net 语言使用

http://my.oschina.net/duluo180/blog/8498

 

 

.Net BCL 支持两种互操作技术,模块 级重用 P/Invoke 和组件级重用COM 互操作,C++/CLI 除了支持以上两种互操作以外,更支持代码级重用, 称为 C++ Interop,本文仅举例说明这种互操作技术。本例使用 ISO C++ 建立一个类 NativeLib, 计算并打印两个位置的直线距离,然后使用 C++/CLI 封装在一个 NativeLibWrap 托管类里,提供给 C# 主程序调用。

 

  

  

以上是 ISO C++ 代码,要在为了在托管平台 下使用,定义一个包装类 NativeLibWrap它引用一个 NativeLib ISO C++)对象的指针,注意一个托管 对象不能直接包含一个本地(ISO C++)对象,只能使用指针,这是 由垃圾收集机制决定的,本地堆内存属于非托管资源,因此 NativeLibWrap 类实现了 Dispose 模式,请参考我的另一篇博客—— .Net Dispose 模式与 C++/CLI 确定性资源清理

 

  

  

Compile the four files with:

cl /clr /LD NativeLibWrap.cpp NativeLib.cpp

将产生NativeLibWrap.dll

 

  

Compile with:

csc /r:NativeLibWrap.dll NativeLibWrapTest.cs

输出NativeLibWrapTest.exe

 

运行, 输出The distance is 5

 

    对于ISO C++ 自定义的struct, enum 等类型,为了在其他.Net 语言中调用,需要重新定义为value struct (value class), enum class 等,如果只是在C++/CLI中使用,则不需要重新定义,因为C++/CLI 支持ISO C++ 与托管代码的混合编程。

 

    C++/CLI 也支持在本地类型中访问托管对象,需要使用gcroot 模板,也比较简单,可以查阅MSDN    

相关文档说明,本文不再缀述。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值