C#.net调用动态库dll注意事项

简介:
C#.net调用动态库dll注意事项


本文主要描述作者在工作中所遇到技术难点及问题,最后提出相关的解决方案

 

场景 

 公司有个业务需求涉及到ID读卡器,构建成在ID卡读卡器一刷ID卡,系统就自动显示其ID卡号以及该ID卡的基本信息和消费的记录等信息;

 

问题

 在选购相关的ID读卡器产品后,下载其开发包其中包含了用C++语言开发的动态库DLL,在调用时出现以下问题:

1、无法加载 DLL“OUR_IDR.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。 

 

2、尝试读取或写入受保护的内存。这通常指示其他内存已损坏 

 

解决方案 

1、第一个问题“无法加载 DLL“OUR_IDR.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”,解决很简单,具体方法是将 dll复制到应用程序中的bin目录即可。 

 

2、

我在调用以下代码时:

[DllImport( " OUR_IDR.dll ")]
  public  static  extern  byte[] idr_read( byte[] pserial);

 就出现错误“尝试读取或写入受保护的内存。这通常指示其他内存已损坏 ”。

 

解决方法是将byte[]改为IntPtr即可,如:

 

[DllImport( " OUR_IDR.dll ")]
public  static  extern IntPtr idr_read(IntPtr pserial);

 

 在调用时:

 

IntPtr cardId =  new IntPtr();
IntPtr result = Module.idr_read(cardId);

 即可;

 

C#在调用C++动态库DLL时,注意数据类型转换

 

C# 与 C++ 数据类型对照
C++            C#
=====================================
WORD            ushort
DWORD            uint
UCHAR            int/byte   大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte 
UCHAR*            string/IntPtr
unsigned char*         [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
char*            string
LPCTSTR            string
LPTSTR            [MarshalAs(UnmanagedType.LPTStr)] string
long            int
ulong               uint
Handle            IntPtr
HWND            IntPtr
void*            IntPtr
int            int
int*            ref int
*int            IntPtr
unsigned int        uint
COLORREF                uint

 

 

转载请注明出处[ http://samlin.cnblogs.com/] 
作者赞赏
 


刚做的招标网: 八爪鱼招标网 请大家多意见

本文转自Sam Lin博客博客园博客,原文链接:http://www.cnblogs.com/samlin/archive/2012/03/23/DllImport.html,如需转载请自行联系原作者
目录
相关文章
|
21天前
|
IDE 前端开发 JavaScript
【C#】C# 开发环境配置(Rider 一个.NET 跨平台集成开发环境)
【1月更文挑战第26天】【C#】C# 开发环境配置(Rider 一个.NET 跨平台集成开发环境)
|
25天前
|
Linux C# 开发工具
C#开源的一款友好的.NET SDK管理器
C#开源的一款友好的.NET SDK管理器
|
26天前
|
算法 C#
C# .Net Core bytes转换为GB/MB/KB 算法
C# .Net Core bytes转换为GB/MB/KB 算法
10 0
|
26天前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
11 0
|
1月前
|
NoSQL 关系型数据库 MongoDB
【DotNetGuide】C#/.NET/.NET Core学习、工作、面试指南
【DotNetGuide】C#/.NET/.NET Core学习、工作、面试指南
|
1月前
|
开发框架 算法 .NET
新手友好、轻量级的C#/.NET万能工具库
新手友好、轻量级的C#/.NET万能工具库
|
1月前
|
SQL 算法 搜索推荐
一份阅读量13万+免费的C#/.NET/.NET Core面试宝典(基础版)
一份阅读量13万+免费的C#/.NET/.NET Core面试宝典(基础版)
|
1月前
|
开发框架 .NET API
C#/.NET/.NET Core推荐学习书籍(23年12月更新)
C#/.NET/.NET Core推荐学习书籍(23年12月更新)
|
1月前
|
数据采集 开发框架 JavaScript
C#/.NET/.NET Core优秀项目和框架2023年12月简报
C#/.NET/.NET Core优秀项目和框架2023年12月简报
|
2月前
|
数据采集 开发框架 监控
C# ASP.NET 实验室 检验中心 医疗LIS源码
LIS系统整体流程 检验项目申请:医生通过HIS或者病历系统开具检验项目检验申请单(内容包括病人信息及检验项目),申请信息自动传到护士站。如果不和HIS和病历系统对接,可以通过LIS系统自身的检验申请模块,实现申请单电子化,申请信息自动传到护士站。
27 0

相关产品

  • 云迁移中心