美文网首页
C# 平台调用Win32函数

C# 平台调用Win32函数

作者: OMG_1bcc | 来源:发表于2018-11-21 19:30 被阅读0次

调用Win32 API函数有一些问题需要注意的地方:
一、 因为很多Win32 API函数都有ANSI和Unicode两个版本,所以在托管代码声明时需要指定调用调用函数的版本。
函数可能有两个版本,而函数名+A 代表的就是ANSI版本,而函数名+W 代笔的就是Unicode版本
二、使用平台调用技术中,还需要注意下面4点:
①DllImport属性的ExactSpelling字段如果设置为true时,则在托管代码中声明的函数名必须与要调用的非托管函数名完全一致,ExactSpelling 默认值就是false的;
②如果采用设置CharSet的值来控制调用函数的版本时,则需要在托管代码中声明的函数名必须与根函数名一致,否则也会调用出错;
③如果通过指定DllImport属性的EntryPoint字段的方式来调用函数版本时,此时必须相应地指定与之匹配的CharSet设置,意思就是——如果指定EntryPoint为 函数名+W,那么必须将CharSet指定为CharSet.Unicode,如果指定EntryPoint为 函数名+A,那么必须将CharSet指定为CharSet.Ansi或者不指定,因为 CharSet默认值就是Ansi。
④CharSet还有一个可选字段为——CharSet.Auto, 如果把CharSet字段设置为CharSet.Auto,则平台调用会针对目标操作系统适当地自动封送字符串
三、出现错误时
要想获得在调用Win32函数过程中出现的错误信息,首先必须将DllImport属性的SetLastError字段设置为true,只有这样,平台调用才会将最后一次调用Win32产生的错误码保存起来,然后会在托管代码调用Win32失败后,通过Marshal类的静态方法GetLastWin32Error获得由平台调用保存的错误码,从而对错误进行相应的分析和处理。这样就可以获得Win32中的错误信息了。

相关文章

  • C# 平台调用Win32函数

    调用Win32 API函数有一些问题需要注意的地方:一、 因为很多Win32 API函数都有ANSI和Unicod...

  • C#调用OpenCV函数的实现

    C#调用OpenCV函数的实现步骤:1、C++编写调用OpenCV函数的方法,编译成dll;2、C#引用C++生成...

  • C#与C++类型互转

    一、C#调用DLL文件时参数对应表 二、C#调用C++编写的DLL函数, 以及各种类型的参数传递 如果函数只有传入...

  • 中文拼音转换内置函数

    SqlServer中文拼音转换内置函数 Oracle拼音中文拼音转换内置函数: C# 调用代码

  • Python函数

    一函数定义 1内置函数 Python内置了很多有用的函数,我们可以直接调用。不像C#中调用函数,需要先实例化类,再...

  • tolua调用c#函数及变量

    比如说你要调用一个lua函数 但你想把自身传给lua函数让这个函数调用c# 类的其他函数以及变量 首先是调用lua...

  • 对Lua ,C,C#互相调用的理解

    几种情况讨论 C调用Lua C调用C# C#调用C C#调用Lua Lua调用C Lua调用C# Lua调用C 本...

  • Unity3D与iOS通信

    unity3d调用iOS函数,实现传参以及得到返回值;C#: 在需要调用函数传参的时候调用即可 OC:建立一个OC...

  • [SQL Server CLR] CLR表值函数

    注:其他还有,CLR标量函数和聚合函数 1. C#创建dll 2. Sql Server配置 3. 调用

  • python调用c#带out参数的函数

    c#的函数支持out参数,可以这样写: void function(out string param1); 调用时...

网友评论

      本文标题:C# 平台调用Win32函数

      本文链接:https://www.haomeiwen.com/subject/orxhqqtx.html