·这里写一写自己对.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
.NET 互操作实验
最新推荐文章于 2024-07-28 23:58:23 发布