c# dllimport(如何做笔记)

DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息

大家好,又见面了,我是你们的朋友全栈君。

先看个例子:

using System.Runtime.InteropServices;
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);

这是C#中调用WindowsAPI读取ini配置文件的例子。

[DllImport("kernel32")] 这叫引入kernel32.dll这个动态连接库。

private static extern void 函数名(参数,[参数]);

函数名就是一个属于kernel32.dll里的一个函数。

DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息


[AttributeUsage(AttributeTargets.Method)]
public class DllImportAttribute: System.Attribute
{
    public DllImportAttribute(string dllName) {…} //定位参数为dllName
    public CallingConvention CallingConvention; //参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值 CallingConvention.Winapi。
    public CharSet CharSet; //参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值 CharSet.Auto。
    public string EntryPoint;  //参数给出 dll 中入口点的名称。如果未指定 EntryPoint,则使用方法本身的名称。
    public bool ExactSpelling;  //参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定 ExactSpelling,则使用默认值 false。
    public bool PreserveSig;  //参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有 HRESULT 返回值和该返回值的一个名为 retval 的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值 true。 
    public bool SetLastError;  //参数指示方法是否保留 Win32"上一错误"。如果未指定 SetLastError,则使用默认值 false。 
    public string Value { get {…} }
}

DllImport有如下特点:

1、DllImport只能放置在方法声明上。

2、DllImport具有单个定位参数:指定包含被导入方法的 dll 名称的 dllName 参数。

3、DllImport具有五个命名参数:

4、它是一次性属性类。

5、此外,用 DllImport 属性修饰的方法必须具有 extern 修饰符。


相关连接

C#入门教程:C# 使用DllImport 调用 native DLL的方法

DllImportAttribute 类 (System.Runtime.InteropServices)

C#中的DllImport

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128400.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java传真发送,用Java发送传真解决之道

    java传真发送,用Java发送传真解决之道在传真量很大的部门,用传真机发送传真有时候不仅浪费资源(很多东西都是先需要打印出来然后再去传真),而且效率低下,也不便于归档管理。大家都知道,Windowsxp提供了传真服务组件,需要使用一个modem,就可以供传真服务。只要是能够打印的东西,都能够传真,这样确实方便不少。但是,实际使用中会有一个比较严重的问题,就是fax并不像打印机一样可以共享使用,这样网络中的其他机器就不能使用该…

    2022年6月28日
    28
  • SpringFramework、SpringBoot、SpringCloud的区别

    SpringFramework、SpringBoot、SpringCloud的区别文章目录SpringSpringFrameworkSpringMVCSpringBootSpringCloud总结Spring是一个技术生态体系,是集大成者。它包含了SpringFramework、SpringBoot、SpringCloud等(还包括SpringClouddataflow、springdata、springintegration、springbatch、springsecurity、springhateoas),可以参考链接:https://spring.

    2022年6月1日
    31
  • 《Python 快速入门》一千个程序员有一千套编码规范[通俗易懂]

    《Python 快速入门》一千个程序员有一千套编码规范[通俗易懂]一千个读者有一千个哈姆莱特。–莎士比亚一千个程序员有一千套编码规范。–不吃西红柿

    2022年9月22日
    3
  • 什么是单元测试,集成测试,系统测试_软件测试中的单元测试

    什么是单元测试,集成测试,系统测试_软件测试中的单元测试分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netDefinitionDecoupleanabstractionfromitsimplementationsothatthetwocanvaryindependently.ParticipantsThec…

    2022年10月15日
    3
  • RSA加密算法详解及例题

    RSA加密算法详解及例题这是我自己在学习RSA加密算法的时候自己整理的笔记,如需转载请注明出处RSA加密算法我这里就不对RSA的发明背景做介绍了,你只要知道RSA加密算法是非常非常重要的加密算法,放在现在的时代亦是如此。RSA加密算法的安全性是基于对极大整数做因数分解的困难。RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。例如:(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。(2)甲方获取乙方的公钥,然后用它对信息加密

    2022年6月12日
    70
  • IOS-支付宝

    IOS-支付宝

    2021年9月13日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号