iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#中怎么调用P/Invoke
  • 316
分享到

C#中怎么调用P/Invoke

2023-06-17 23:06:05 316人浏览 薄情痞子
摘要

C#中怎么调用P/Invoke,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#调用P/Invoke是完成这一任务的最常用方法。要C#调用P/Invoke,您可以编写一个描

C#中怎么调用P/Invoke,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

C#调用P/Invoke是完成这一任务的最常用方法。要C#调用P/Invoke,您可以编写一个描述如何调用函数的原型,然后运行时将使用此信息进行调用。另一种方法是使用 Managed Extensions to c++ 来包装函数,这部分内容将在以后的专栏中介绍。

要理解如何完成这一任务,***的办法是通过示例。在某些示例中,我只给出了部分代码;完整的代码可以通过下载获得。

简单示例

在***个示例中,我们将调用 Beep() api 来发出声音。首先,我需要为 Beep() 编写适当的定义。查看 MSDN 中的定义,我发现它具有以下原型:

BOOL Beep{  DWord dwFreq, // 声音频率  DWORD dwDuration  // 声音持续时间  }

要用 C# 来编写这一原型,需要将 Win32 类型转换成相应的 C# 类型。由于 DWORD 是 4 字节的整数,因此我们可以使用 int 或 uint 作为 C# 对应类型。由于 int 是 CLS 兼容类型(可以用于所有 .net 语言),以此比 uint 更常用,并且在多数情况下,它们之间的区别并不重要。bool 类型与 BOOL 对应。现在我们可以用 C# 编写以下原型:

public static extern bool Beep(int frequency, int duration);

这是相当标准的定义,只不过我们使用了 extern 来指明该函数的实际代码在别处。此原型将告诉运行时如何调用函数;现在我们需要告诉它在何处找到该函数。

我们需要回顾一下 MSDN 中的代码。在参考信息中,我们发现 Beep() 是在 kernel32.lib 中定义的。这意味着运行时代码包含在 kernel32.dll 中。我们在原型中添加 DllImport 属性将这一信息告诉运行时:

[DllImport("kernel32.dll")]

这就是我们要做的全部工作。下面是一个完整的示例,它生成的随机声音在二十世纪六十年代的科幻电影中很常见。

using System;  using System.Runtime.InteropServices;   namespace Beep  {  class Class1  {  [DllImport("kernel32.dll")]  public static extern bool Beep(int frequency, int duration);   static void Main(string[] args)  {  Random random = new Random();   for (int i = 0; i < 10000; i++)  {  Beep(random.Next(10000), 100);  }  }  }  }

它的声响足以刺激任何听者!由于 DllImport 允许您调用 Win32 中的任何代码,因此就有可能调用恶意代码。所以您必须是完全受信任的用户,运行时才能进行C#调用P/Invoke。

关于C#中怎么调用P/Invoke问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: C#中怎么调用P/Invoke

本文链接: https://www.lsjlt.com/news/294463.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#中怎么调用P/Invoke
    C#中怎么调用P/Invoke,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#调用P/Invoke是完成这一任务的最常用方法。要C#调用P/Invoke,您可以编写一个描...
    99+
    2023-06-17
  • P/Invoke之C#调用动态链接库DLL的方法是什么
    这篇文章主要介绍了P/Invoke之C#调用动态链接库DLL的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇P/Invoke之C#调用动态链接库DLL的方法是什么文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-05
  • C#的Invoke怎么使用
    在C#中,Invoke是用于在主线程中执行委托的方法。Invoke方法可以确保委托在主线程上同步执行,这在多线程编程中非常有用。以下...
    99+
    2023-08-08
    C# Invoke
  • C#中怎么用invoke获取返回值
    在C#中可以使用Invoke方法来调用一个方法或委托,并获取其返回值。Invoke方法是Delegate类的成员,可以用于调用任何类...
    99+
    2023-10-23
    C# invoke
  • C#中Invoke的用法是什么
    这篇文章主要介绍“C#中Invoke的用法是什么”,在日常操作中,相信很多人在C#中Invoke的用法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#中Invoke的用法是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-20
  • C#中Invoke的用法讲解
    C#中Invoke的用法() invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些...
    99+
    2024-04-02
  • c# invoke方法怎么正确使用
    在C#中,可以使用Invoke方法来在另一个线程中执行UI操作。以下是正确使用Invoke方法的步骤。 确保你正在在UI线程中调用...
    99+
    2023-10-28
    c#
  • InvocationHandler中invoke()方法的调用问题分析
    Java中动态代理的实现,关键就是这两个东西:Proxy、InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的。首先,invoke方法的完整形式如下...
    99+
    2023-05-30
    java invoke 调用
  • c#中Invoke与BeginInvoke的用法及说明
    目录c# Invoke与BeginInvoke先讲下InvokeBeginInvoke总结c# Invoke与BeginInvoke 最近在学习线程时,发现当我创建的线程需要访问UI...
    99+
    2023-01-28
    c# Invoke c# BeginInvoke c# Invoke与BeginInvoke
  • c语言中*p和p的区别是什么
    区别:1、表示的含义不同,“*p”表示此指针指向的内存地址中存放的内容,“p”表示一个指针变量的名字,指此指针变量所指向的内存地址。2、输出的格式不同,“*p”输出的一般是一个和指针类型一致的变量或者常量,“p”输出的是一个16进制数, 输...
    99+
    2023-05-14
    指针 C语言
  • C++中怎么调用C接口
    本篇文章为大家展示了C++中怎么调用C接口,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C++如何调用C接口首先提供一个C接口:#include"test.h" voi...
    99+
    2023-06-16
  • C#中怎么调用iisapp.vbs
    C#中怎么调用iisapp.vbs,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C#调用iisapp.vbs代码:usingSystem;  usingSyste...
    99+
    2023-06-17
  • C#中怎么调用CreateObject
    这篇文章给大家介绍C#中怎么调用CreateObject,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。如在VB中的源代码如下:PublicSubTestLateBind()  DimoAsObjec...
    99+
    2023-06-18
  • C#中Parallel类For、ForEach和Invoke使用介绍
    一、简介: Parallel类提供了数据和任务的并行性;Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务。使用Paraller.For()方法,可以并...
    99+
    2024-04-02
  • php中invoke的作用是什么
    在PHP中,invoke是一种特殊方法,用于在对象上调用函数。当在一个对象上调用一个方法时,如果这个对象是一个可调用对象(实现了__...
    99+
    2024-03-06
    php
  • C++中怎么调用C链接库
    本篇文章给大家分享的是有关C++中怎么调用C链接库,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C++调用C链接库,其实相对C调用C++。因为C++本来就向下兼容C吧但由于编译...
    99+
    2023-06-17
  • html中p标签怎么用
    这篇文章给大家分享的是有关html中p标签怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 p 标签是我们的文本标签,p 标签会自动在其两个标签之间创建一些空白。删掉上段代...
    99+
    2024-04-02
  • c++中函数怎么调用
    c++ 中的函数调用涉及以下步骤:定义函数。在使用位置声明函数。使用函数名及其参数调用函数。根据需要选择参数传递方式(值传递或引用传递)。 如何在 C++ 中调用函数 C++ 中的函数...
    99+
    2024-05-01
    c++
  • C#中怎么调用方法
    这篇“C#中怎么调用方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#中怎么调用方法”文章吧。C# 中调用方法可以使用方...
    99+
    2023-06-17
  • 怎么在C++中调用Python
    小编给大家分享一下怎么在C++中调用Python,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Python的安装为了使用Python.h这个扩展项,我们需要安装一...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作