关于C++/CLI中的Interop问题的思考

[转载:http://www.wangchao.net.cn/bbsdetail_49096.html]

 

 在C++/CLI中如何让你的Managed Code和Unmanaged(Native) Code沟通自如?interior_ptr和pin_ptr是桥梁——interior_ptr充当一个Managed Heap上的Native Pointer的角色。而pin_ptr则可以把对象钉在Managed Heap上!
  所以,pin_ptr允许把Managed世界里的东西带入Unmanaged(Native)世界。
  而如果想反其道而行,即把Unmanaged(Native)世界里的东西带入Managed世界,则可以自己写一个ref/value class的wrapper(目前),以后微软打算允许Native Class在Managed Heap上创建,并且允许Ref Class在栈上创建(彼时ref class关键字是否还有存在的价值?),从而允许更为方便的交互。
  但是这里的问题是,基本上这种交互都是处于“基本类型的数据”层次的交互。pin_ptr只能把基本类型钉在Managed Heap上,也就是说,你可以写:
  pin_ptr<int> p = ...;
  却不能写
  pin_ptr<GC_Class> p = ...; //错误!
  这是因为.NET的对象模型和Native C++的对象模型是不兼容的,即使可以把GC_Class的对象钉在GC堆上并返回其首地址,也不能把它作为一个Native Class类对象来用。反之亦然。
  

posted @ 2009-04-16 10:45  飞扬跋扈  阅读(279)  评论(0编辑  收藏  举报