C#.net调用动态库dll注意事项
2012-03-23 13:15
253 查看
C#.net调用动态库dll注意事项
本文主要描述作者在工作中所遇到技术难点及问题,最后提出相关的解决方案
场景
公司有个业务需求涉及到ID读卡器,构建成在ID卡读卡器一刷ID卡,系统就自动显示其ID卡号以及该ID卡的基本信息和消费的记录等信息;
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
本文主要描述作者在工作中所遇到技术难点及问题,最后提出相关的解决方案
场景
公司有个业务需求涉及到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
相关文章推荐
- (学习笔记)C++编写dll C#调用注意事项
- C++调用C#生成的DLL实现及注意事项
- 关于C#与Delphi DLL调用及回调问题注意事项
- 字段内存C#调用C++DLL注意事项
- C#中调用C++写的DLL注意事项
- c#调用java代码(jar转化成dll):ikvm 使用注意事项
- C# 调用带有复杂参数的C++ ,delphi dll 注意事项备注。(C++ dll 怎么回调C# 程序,参数怎么写?)
- C# 调用 C++ dll 函数 时传递字符串 需要注意的问题
- C#调用C++版本dll时的类型转换要注意的问题
- C#调用C++版本dll时的类型转换需要注意的问题小结
- C# .net写的程序调用C++.net写的动态库装载失败,原因一句说清
- SQL Server 调用C#。net写的Dll ,(分享我的HelloWorld测验)
- C#调用C库的注意事项
- 在c#里调用C++的dll时,需要注意的一些问题
- 转:C# .NET中调用VB编写的DLL代码事例(我做了些修改)
- JNA调用dll文件时注意事项
- C# .net写的程序调用C++.net写的动态库,装载失败
- 在c#里调用C++的dll时,需要注意的一些问题
- ASP.NET/C#中如何调用动态链接库DLL
- ava 调用 .net Webservice的一些问题和注意事项