问题:

当我用

[DllImport("*.dll", EntryPoint = "*",CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)]

调用外部dll文件做身份证读卡的时候,出现如图的错误

令我很是意外,查其原因:

托管代码与非托管代码之间的相互调用,数据交换的问题。

那么问题来了,什么是托管代码,什么是非托管代码?

经百度得知,托管代码指的是必须依靠.NET框架解释运行的代码,非托管代码一般指的是传统的不需要借助.NET框架解释的代码。

在.NET出现之前,如VB,C++,DELPHI编写的程序都是非托管代码。

下面贴出我做数据定义的一些代码:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = )]
public struct PersonInfor
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = )]
public string name;
}

大家可以看到,跟平常定义属性不太一样,少了set,get 多了两个中括号。

下面来简单解释一下:

MarshalAs属性指示如何在托管代码和非托管代码之间封送数据。

UnmanagedType.ByValTStr 是数据类型。

SizeConst 是数据大小。

StructLayout 是结构体要加的属性,别问我为什么,我也不知道。

LayoutKind.Sequential属性让结构体在导出到非托管内存时按出现的顺序依次布局。

CharSet = CharSet.Unicode 很明显是字符格式。

Pack = 8 这个应该和外部的dll 定义有关系。

介绍到这里,下面说一下我为什么会出现这个错误,是因为我没有将

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode, Pack = 8)]

加上,所以报错。

不说了,说多了都是泪。

DllImport 相关错误的更多相关文章

  1. OpenStack虚机相关错误

    OpenStack配置起来还是挺麻烦的,特别是网络那块.虽然官方文档越来越清晰,但有时还是会出各种错.排错主要是看日志.看官方文档和google 以下就一些虚机相关常见的错误做一下总结(基于Iceho ...

  2. 文件 "c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\ttt.mdf" 已压缩,但未驻留在只读数据库或文件组中。必须将此文件解压缩。 CREATE DATABASE 失败。无法创建列出的某些文件名。请查看相关错误。 (.Net SqlClient Data Provider)

    问题: 文件 "c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\ttt.mdf" 已压缩,但 ...

  3. Linux 下Redis集群安装部署及使用详解(在线和离线两种安装+相关错误解决方案)

    一.应用场景介绍 本文主要是介绍Redis集群在Linux环境下的安装讲解,其中主要包括在联网的Linux环境和脱机的Linux环境下是如何安装的.因为大多数时候,公司的生产环境是在内网环境下,无外网 ...

  4. thinkphp5.0的验证码安装和相关错误

    thinkphp5.0的验证码安装和相关错误 问题 只要是之前使用thinkphp5框架搭建网站的时候发现不管如何调用验证码都无法使用,按照官网要求,使用composer安装验证码出现报错Fatal ...

  5. vc编译器 msvcr.dll、msvcp.dll的含义和相关错误的处理

    转自:http://blog.csdn.net/sptoor/article/details/6203376 很久没有写程式设计入门知识的相关文章了,这篇文章要来谈谈程式库 (Library) 连结, ...

  6. 【XCode7+iOS9】http网路连接请求、MKPinAnnotationView自定义图片和BitCode相关错误--备用

    更新了iOS9和XCode7,之后,Swift变成了2.0,有了新的语法习惯,iOS也加强了安全方面的限制.我们原本的项目就会出现不少问题.先来看我之前的项目中出现的3个错误吧和相关的解决办法吧. 1 ...

  7. Hibernate 关联查询 相关错误

    错误提示: could not resolve property: 确定有相关属性时,记得使用 criteria.createAlias @ManyToOne 若可能为null 要加上 @NotFou ...

  8. Spark:相关错误总结

    http://blog.csdn.net/pipisorry/article/details/52916307 路径错误 spark FileNotFoundError: [Errno 2] No s ...

  9. react-native学习(RN)--之Window环境下搭建环境配置,以及初始化建立react-native项目,(真机和模拟器运行的相关错误解决办法,android打包报错)

    react-native以后会更火的 一.安装java 二.安装Android Studio 三.安装react-native需要的Android studio额外部分 四.安装nodeJS  五.安 ...

随机推荐

  1. 嗨分享-前端技术-帝国CMS手机站修改列表分页(sysShowListMorePage)

    http://bbs.phome.net/showthread-31-318753-0.html 如果你的网站使用的是帝国CMS.PC站和手机站各使用一个模板组,但共同使用一个数据库.那么你的PC站和 ...

  2. Zybo智能小车识别图像中的文字

    智能小车识别图像中的文字 [TOC] 运行平台 这次的内容是基于Xilinx公司的Zybo开发板以及其配套的Zrobot套件开发 Zybo上面的sd卡搭载了Ubuntu12.04LTS的linux版本 ...

  3. JS中showModalDialog 详细使用

    基本介绍: showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) window.showModalDialog() 方法用来创建一个 ...

  4. 微软职位内部推荐-Senior Software Engineer -Web

    微软近期Open的职位: Location: Beijing, China The Office App Services team is working on the powerful Office ...

  5. NSString+NSStringForJava.m

    // // NSString+NSStringForJava.m // NSStringCategory // // Created by Ryan Tang on 12-10-17. // Copy ...

  6. 四则运算2扩展---c++

    题目:让程序能接受用户输入答案,并判定对错.最后给出总共对/错 的数量. 一.设计思想 1.存储用户输入答案,与正确答案比较得出总共对错数量. 二.源程序代码 #include<iostream ...

  7. VS2013 help viewer搜索结果显示源码以及桌面独立运行help viewer

    安装好VS2013后,启动help viewer2.1在搜索栏中搜搜时结果会出现HTML源码. 要解决这个问题先来看看MINE,即Multipurpose Internet Mail Extensio ...

  8. Node.js 学习(一) 安装配置

    Windowv 上安装Node.js Windows 安装包(.msi) : 32 位安装包下载地址 : http://nodejs.org/dist/v0.10.26/node-v0.10.26-x ...

  9. POSIX 线程详解 一种支持内存共享的简捷工具

    线程是有趣的 了解如何正确运用线程是每一个优秀程序员必备的素质.线程类似于进程.如同进程,线程由内核按时间分片进行管理.在单处理器系统中,内核使用时间分片来模拟线程的并发执行,这种方式和进程的相同.而 ...

  10. jquery 提示简单效果插件 cluetip

    介绍一个不错的jquery插件-cluetip 我们在做web项目的时候,经常会使用到提示效果.html自带的提示效果是label标签的title,但是这个效果过于简单和难看,并且不方便调整样式. 今 ...