大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功能呢?答案是肯定的,大家可以通过C#中的DllImport直接调用这些功能。    DllImport所在的名字空间 using System.Runtime.InteropServices;    MSDN中对DllImportAttribute的解释是这样的:可将该属性应用于方法。DllImportAttribute 属性提供对从非托管 DLL 导出的函数进行调用所必需的信息。作为最低要求,必须提供包含入口点的 DLL 的名称。    DllImport 属性定义如下:     namespace System.Runtime.InteropServices    {     [AttributeUsage(AttributeTargets.Method)]     public class DllImportAttribute: System.Attribute     {      public DllImportAttribute(string dllName) {...}      public CallingConvention CallingConvention;      public CharSet CharSet;      public string EntryPoint;      public bool ExactSpelling;      public bool PreserveSig;      public bool SetLastError;      public string Value { get {...} }     }   }        说明:        1、DllImport只能放置在方法声明上。       2、DllImport具有单个定位参数:指定包含被导入方法的 dll 名称的 dllName 参数。       3、DllImport具有五个命名参数:         a、CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值 CallingConvention.Winapi。         b、CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值 CharSet.Auto。        c、EntryPoint 参数给出 dll 中入口点的名称。如果未指定 EntryPoint,则使用方法本身的名称。         d、ExactSpelling 参数指示 EntryPoint 是否必须与指示的入口点的拼写完全匹配。如果未指定 ExactSpelling,则使用默认值 false。    

   e、PreserveSig 参数指示方法的签名应当被保留还是被转换。当签名被转换时,它被转换为一个具有 HRESULT返回值和该返回值的一个名为 retval 的附加输出参数的签名。如果未指定 PreserveSig,则使用默认值 true。         f、SetLastError 参数指示方法是否保留 Win32"上一错误"。如果未指定 SetLastError,则使用默认值 false。        4、它是一次性属性类。        5、此外,用 DllImport 属性修饰的方法必须具有 extern 修饰符。

    DllImport的用法:       DllImport("MyDllImport.dll")]       private static extern int mySum(int a,int b);
IC卡读卡器操作引入sdk用以下方式导入dll,报-84错误[DllImport("mwrf32.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Auto, SetLastError = true)]public static extern short rf_HL_writehex(int icdev, short mode, short Adr, ref int Snr, string sdata);最后改成 [DllImport("mwrf32.dll")]
public static extern short rf_HL_writehex(int icdev, short mode, short Adr, ref int Snr, string sdata);
问题解决

转载于:https://www.cnblogs.com/ProgrammerGE/archive/2013/01/04/2843532.html

C# DllImport相关推荐

  1. 关于C#中的DLLImport (引)

    MSDN中对DllImportAttribute的解释是这样的:可将该属性应用于方法.DllImportAttribute 属性提供对从非托管 DLL 导出的函数进行调用所必需的信息.作为最低要求,必 ...

  2. 不能定义声明dllimport_C#:多个声明的一个属性(DLLImport)

    我正在使用[DLLImport]属性来访问我的.NET代码中的一堆C函数. 现在,我通过以下方式拥有所有功能: const string DLL_Path = "path\\to\\my\\ ...

  3. 在 .NET 框架程序中通过DllImport使用 Win32 API

    .NET 框架程序可以通过静态 DLL 入口点的方式来访问本机代码库.DllImport 属性用于指定包含外部方法的实现的dll 位置.       DllImport 属性定义如下:      na ...

  4. 如果类是个泛型类的话dllImport 代码不能编译

    你可能需要在dllImport代码中使用泛型类.但是你知道下面的代码段能通过编译么? 1 open System.Runtime.InteropServices 2 3 type B<'T> ...

  5. extern C __declspec(dllexport) __declspec(dllimport) 和 def

    前面的extern "C"  __declspec(dllexport)  __declspec(dllimport)都是用于函数或者变量,甚至类的声明的(可以把extern &q ...

  6. C++中#ifndef XXX_H #difine XXX_H解析及dllexport、dllimport用法示例

    在学习C++的过程中,我们经常发现在头文件前部有一些标识符定义,比如: //示例1:#ifdef CREATEDELL_API_DU #else #define CREATEDELL_API_DU _ ...

  7. c# DllImport 错误处理的不足及解决办法

    一般而言DllImport 是十分方便的,但是当出现错误时,他给出的错误也十分模糊,同时是不全面的. 比如,之前就遇到一个第三方dll, DllImport 死活说找不到这个dll. 但是我很确定错在 ...

  8. 非常好的dllimport 文章--在 C# 中通过 P/Invoke 调用Win32 DLL

    http://msdn.microsoft.com/zh-cn/library/aa686045.aspx 在 C# 中通过 P/Invoke 调用Win32 DLL 发布日期 : 1/13/2005 ...

  9. declspec(dllexport)与_declspec(dllimport) 异同

    declspec(dllexport)与_declspec(dllimport) 异同 2010-11-08 18:51 1 _declspec(dllexport)与_declspec(dllimp ...

最新文章

  1. 【数据平台】同一mysql主机不同数据库建复制表
  2. RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
  3. 脚本错误和安全警报怎么解决_适用于应用程序错误的AWS警报
  4. Spring MVC自定义验证注释
  5. .h文件包含后显示类型_C语言中#include只能包含.h文件吗?
  6. 7年,OpenStack从入门到放弃
  7. 人工智能中国专利技术分析报告发布,百度三年蝉联榜首
  8. 解决Glyphicons 字体不显示问题的两种解决方案
  9. python如何屏幕截图_Python实现屏幕截图的两种方式
  10. mac 中word去掉超链接
  11. oracle常用sql语句查询语句,Oracle常用sql语句
  12. c语言自我介绍范文,个性的自我介绍范文5篇
  13. HBase2.4.8详细教程(三)Java操作HBase
  14. C# WinForm GUI之WinForm基础
  15. scite的基本配置
  16. 【报告分享】2020小红书年中美妆洞察报告.pdf(附下载链接)
  17. JavaWeb - 小米商城 :首页商品分类展示
  18. 一个简单的wifi热点启动流程追踪
  19. 什么是Apptainer?如何在Ubuntu服务器上安装?
  20. 如何将本地项目存入华为云

热门文章

  1. UPDATE 时主键冲突引发的思考
  2. java11 新特性 详解
  3. [JOISC2014]ストラップ
  4. linux中断系统那些事之----中断处理过程【转】
  5. 机器学习如何帮助企业高效地管理数据?
  6. 【EF】EF扩展库(批量操作)
  7. ABP官方文档翻译 9.2 Entity Framework Core
  8. phoenix 开发API系列(二)phoenix 各类 api 实现方式
  9. Web开发之Goahead
  10. Block变量的的用法,使你的程序看起来清晰明了!