平台叫用服務 平台叫用服務英語Platform Invocation Services或称PInvoke是微软的公共语言基础设施实现的一个特性类似于微软的公共语言运行时提供的跨平台调用方式允许受控代碼调用原生代码 托管代码例如C或VBNET或CCLI提供对NET Framework的组成库中定义的类方法和类型的本机访问虽然NET Framework提供了一组广泛的功能但它可能无法访问通常以非托管代码编写的许多较低级别的操作系统库或也以非托管代码编写的第三方库PInvoke是程序员可以用来访问这些库中的函数的技术通过在托管代码中声明非托管函数的签名来调用这些库中的函数该签名充当可以像任何其他托管方法一样调用的实际函数该声明引用库的文件路径并定义托管类型中的函数参数和返回值这些托管类型最有可能由公共语言运行时CLR与非托管类型隐式封送当非托管数据类型对于从托管类型到托管类型的简单隐式转换来说变得过于复杂时框架允许用户在函数返回和或参数上定义属性以显式细化数据的编组方式以免试图隐式地这样做会导致异常 与使用非托管语言进行编程相比托管代码程序员可以使用许多低级编程概念的抽象因此仅具有托管代码经验的程序员需要温习编程概念例如指针结构和引用传递以克服使用PInvoke时的一些障碍 平台叫用服務这一特性与微软的公共语言运行时提供的较为类似因此一般提到PInvoke多数指微软的NET实现方案这一方案能够实现通过托管代码访问原生代码使用PInvoke可以通过CLR来控制DLL的加载以及将非托管代码的数据类型转换为托管数据类型