我们继续.NET互操作学习,为了揭开互操作的神秘面纱,今天这篇文章我们就来先睹为快,让我们先来做个例子,基础的东西,我们陆续进行讲解;由于互操作牵扯到的东西非常多,比较复杂,我们要循环渐进的学习,为了给大家有一定的吸引力,让我们一边看一边能动手做起来;本篇文章用VisualStudio2010进行演示,将非托管代码暴露在我们眼前,它对我们来说不在有神秘感,我们通过.NETP/invoke(平台调用)很方便的进行调用,可能需要我们掌握一些C++的基础知识,但是也放心啦,有C语言的基础功,足够用了;我们开始吧;[王清培版权所有,转载请给出署名]
要想成功调用非托管代码我们需要一些准备工作;
1.需要知道非托管DLL文件有哪些导出函数是可以调用的,由于导出函数的方法的名称被重新整顿过了比如一个方法add(int number),整顿后为_add@4,为什么会这样我们后面进行讲解,这跟C++语法有点牵连,这里就不扯了;
2.在托管代码中定义非托管函数的申明,也就是我们.NET平台里的DLLImport特性,该对象是托管平台进行平台调用的核心对象,用它.NET引擎就知道该方法是在外部定义的;
3.用托管代码进行调用非托管方法;
下面我们就开始用VisualStudio2010进行演示,我们用Vs2010创建一个解决方案,里面包括托管与非托管两个项目;我给出非托管代码的创建图:
1:
选择VisualC++—>Win32—>Win32项目;[王清培版权所有,转载请给出署名]
2:
这样我们就创建了非托管C++的开发环境;下面我们来编写C++的代码;我拿我自己事先创建好的项目做演示;
3:
我的非托管项目是Win32DLL,创建好后会有一个和项目名称一样的.cpp文件,这个是源代码文件,我们只需要在里面写点非托管操作的代码就行了;
// Win32DLL.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
extern "C" _declspec(dllexport) int _stdcall add(int x,int y)
{
return x+y;
}
在文件Win32DLL.cpp文件里面我编写了一个add方法,仅仅作为演示使用;暂且我们不管他的具体语法;切换到托管代码中,我的代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace CSharp.Interop
{
public static class InteropClass
{
[DllImport("Win32DLL.dll", EntryPoint = "add", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int AddNumber(int x, int y);
}
}
这样我们就可以直接调用AddNumber方法进行调用了;
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace CSharp
{
class Test1
{
static void Main(string[] args)
{
try
{
int count = Interop.InteropClass.AddNumber(10, 20);
Console.Write(count);
}
catch (DllNotFoundException errnot) { }
catch (EntryPointNotFoundException errpoint) { }
}
}
}
总结:本篇文章的重点是想让大家看一下托管与非托管的整个生命周期是怎么来的,对托管非托管的代码之间的协调有个自己的思路,后面将详细的说明互操作中涉及的细节;
相关推荐
.NET简谈事务、分布式事务处理 ,DTC应用
面向接口编程就是将类与类之间的关系提升到一个更高的抽象层次;面向接口编程是一种境界,作者将为大家作一个入门介绍,希望对你有帮助。
[王清培版权所有,转载请给出署名](可以参考本人的:.NET简谈事务本质论、.NET简谈自定义事务资源管理器)什么叫可逆的?程序的执行是可以被无限制回滚的。什么叫可逆的框架?实现了对可逆功能的封装,并能通过简单的...
简谈计算机应用基础教学 简谈计算机应用基础教学 任务驱动教学法是一种建立在建构主义学习理论基础上的教学法,怎样分析计算 机应用基础教学? 一、引言 从事中职计算机教学多年来,发现了一个非常普遍的现象,即使...
简谈buntu之DIY发行版.pdf 简谈buntu之DIY发行版.pdf 简谈buntu之DIY发行版.pdf
手机成像技术简谈.pdf
简谈Windows下的反调试技术 简谈Windows下的反调试技术 简谈Windows下的反调试技术 简谈Windows下的反调试技术 简谈Windows下的反调试技术 简谈Windows下的反调试技术
手机成像技术简谈.doc
班级管理方法简谈.doc
房地产开发流程简谈.pptx
大众车系编码简谈.pdf
简谈英文自我介绍精选.doc
简谈ERP上机实验心得体会
简谈环境工程的发展史.doc