.NET 互操作实验

·这里写一写自己对.NET互操作的尝试。

什么是.NET互操作?最近遇到一个问题是关于C#调用C++时代下底层操作代码(主要是一些自己写好的类库、COM组件、Windows API等),相信许多人都碰到过类似的问题。在.NET平台下,我一般使用.NET所提供的互操作命名空间System.Runtime.InteropServices下类来帮助我们完成这项操作。

补:这里为什么要C++类库?主要是为复用以往的代码提高开发效率,另一层面上来说,C++或C所编写的代码的执行效率要明显优于CLR下的托管代码。但我们不得不承认这样做会带来安全等相关的问题。

测试:

以下是我自己写的要调用的C++ Test.dll 中一个方法:

int DllClass::Plus(int a,int b){
    return a+b;
}

要成功的调用这样一个方法:

First Step:用eXeScope(不知道的自己百度)要调用这个方法的入口名称

Second Step:在自己的所编写的互操作访问类中编写以下代码来提供一个调用:

        [DllImport("Test.dll", EntryPoint = "_ZN8DllClass4PlusEii")]
        static extern int Plus(int x,int a, int b);

这里的 _ZN8DllClass4PlusEii 就是查出来的方法入口名称,而这里的 x 参数未解,解决一个调用传参Bug,有兴趣的也可以不要这个参数试下,看下行不行。

调用的时候就跟一般代码一样调用就行了,要注意的就是要做好异常捕获与资源释放。

测试未完,以后有时间再带来其它的。

资料参考:

http://developer.51cto.com/art/200908/147647.htm

http://msdn.microsoft.com/zh-cn/library/aa984739(v=vs.71).aspx


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值