自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#調(diào)用Windows API之參數(shù)類型淺析

開發(fā) 后端
C#調(diào)用Windows API之參數(shù)類型主要是向你介紹了C#調(diào)用Windows API中參數(shù)類型的基本情況和使用方法,希望對你了解C#調(diào)用Windows API有所幫助。

C#調(diào)用Windows API之參數(shù)類型是什么樣子的呢?

C#調(diào)用Windows API之參數(shù)類型1、

數(shù)值型直接用對應的就可。

(DWORD -> int , WORD -> Int16)

C#調(diào)用Windows API之參數(shù)類型2、

API中字符串指針類型 -> .net中string

C#調(diào)用Windows API之參數(shù)類型3、

API中句柄 (dWord)  -> .net中IntPtr

C#調(diào)用Windows API之參數(shù)類型4、

API中結(jié)構   -> .net中結(jié)構或者類。注意這種情況下,要先用StructLayout特性限定聲明結(jié)構或類

公共語言運行庫利用StructLayoutAttribute控制類或結(jié)構的數(shù)據(jù)字段在托管內(nèi)存中的物理布局,即類或結(jié)構需要按某種方式排列。如果要將類傳遞給需要指定布局的非托管代碼,則顯式控制類布局是重要的。它的構造函數(shù)中用LayoutKind值初始化 StructLayoutAttribute 類的新實例。 LayoutKind.Sequential 用于強制將成員按其出現(xiàn)的順序進行順序布局。

LayoutKind.Explicit 用于控制每個數(shù)據(jù)成員的精確位置。利用 Explicit, 每個成員必須使用 FieldOffsetAttribute 指示此字段在類型中的位置。如:

  1. [StructLayout(LayoutKind.Explicit,   
  2. Size=16, CharSet=CharSet.Ansi)]  
  3. public class MySystemTime   
  4. {  
  5. [FieldOffset(0)]public ushort wYear;   
  6. [FieldOffset(2)]public ushort wMonth;  
  7. [FieldOffset(4)]public ushort wDayOfWeek;   
  8. [FieldOffset(6)]public ushort wDay;   
  9. [FieldOffset(8)]public ushort wHour;   
  10. [FieldOffset(10)]public ushort wMinute;   
  11. [FieldOffset(12)]public ushort wSecond;   
  12. [FieldOffset(14)]public ushort wMilliseconds;   
  13. }  

C#調(diào)用Windows API之參數(shù)類型實例說明:

下面是針對API中OSVERSIONINFO結(jié)構,在.net中定義對應類或結(jié)構的例子:

  1. /**********************************************  
  2. * API中定義原結(jié)構聲明  
  3. * OSVERSIONINFOA STRUCT  
  4. *  dwOSVersionInfoSize   DWORD      ?  
  5. *  dwMajorVersion        DWORD      ?  
  6. *  dwMinorVersion        DWORD      ?  
  7. *  dwBuildNumber         DWORD      ?  
  8. *  dwPlatformId          DWORD      ?  
  9. *  szCSDVersion          BYTE 128 dup (?)  
  10. * OSVERSIONINFOA ENDS  
  11. *  
  12. * OSVERSIONINFO  equ  <OSVERSIONINFOA>  
  13. *********************************************/   
  14.  
  15.  
  16.  
  17. //.net中聲明為類  
  18. [ StructLayout( LayoutKind.Sequential )]     
  19. public class OSVersionInfo   
  20. {     
  21. public int OSVersionInfoSize;  
  22. public int majorVersion;   
  23. public int minorVersion;  
  24. public int buildNumber;  
  25. public int platformId;  
  26. [ MarshalAs( UnmanagedType.ByValTStr,   
  27. SizeConst=128 )]      
  28. public String versionString;  
  29. }  
  30. //或者  
  31. //.net中聲明為結(jié)構  
  32. [ StructLayout( LayoutKind.Sequential )]    
  33. public struct OSVersionInfo2   
  34. {  
  35. public int OSVersionInfoSize;  
  36. public int majorVersion;   
  37. public int minorVersion;  
  38. public int buildNumber;  
  39. public int platformId;  
  40.  
  41. [ MarshalAs( UnmanagedType.ByValTStr,   
  42. SizeConst=128 )]      
  43. public String versionString;  
  44. }  

此例中用到MashalAs特性,它用于描述字段、方法或參數(shù)的封送處理格式。用它作為參數(shù)前綴并指定目標需要的數(shù)據(jù)類型。例如,以下代碼將兩個參數(shù)作為數(shù)據(jù)類型長指針封送給 Windows API 函數(shù)的字符串 (LPStr):

  1. [MarshalAs(UnmanagedType.LPStr)]  
  2. String existingfile;  
  3. [MarshalAs(UnmanagedType.LPStr)]  
  4. String newfile;  

C#調(diào)用Windows API之參數(shù)類型注意事項:

注意結(jié)構作為參數(shù)時候,一般前面要加上ref修飾符,否則會出現(xiàn)錯誤:對象的引用沒有指定對象的實例。

  1. [ DllImport( "kernel32",  
  2.  
  3.  EntryPoint="GetVersionEx" )]   
  4. public static extern bool   
  5.  
  6. GetVersionEx2( ref OSVersionInfo2 osvi );   

C#調(diào)用Windows API之參數(shù)類型基本的情況就是這樣子的,希望通過介紹對你了解和學習C#調(diào)用Windows API之參數(shù)類型有所幫助。

【編輯推薦】

  1. C# Windows CE特點之可移植性
  2. C# Windows CE特點之兼容性
  3. C# Windows CE特點之可連接性
  4. C# Windows CE特點之實時性
  5. C#調(diào)用Windows API之調(diào)用格式淺析
責任編輯:仲衡 來源: csdn
相關推薦

2009-08-17 13:18:01

C#調(diào)用Windows

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-17 13:49:20

C#中調(diào)用Window

2009-07-31 16:12:10

Windows APIC#

2009-08-03 13:34:57

C#調(diào)用Windows

2009-08-24 15:02:05

C# 類型

2009-08-04 09:30:33

C#調(diào)用ImageAn

2009-08-25 16:16:27

C#調(diào)用Windows

2009-08-25 17:59:49

C#入門

2009-08-12 10:35:50

C#調(diào)用ActiveX

2009-07-31 17:28:35

C#語言調(diào)用DLL

2009-08-14 09:15:28

C#調(diào)用構造函數(shù)

2009-08-06 10:14:15

C#引用類型數(shù)組

2009-08-18 10:35:46

C#枚舉類型

2009-08-18 12:52:33

C#枚舉類型

2009-09-04 18:16:19

C# Main參數(shù)C# Main

2009-08-28 15:57:56

C#線程傳遞參數(shù)

2009-08-06 17:57:14

C# webServiC# WebServi

2009-08-18 09:37:14

C#枚舉類型

2009-08-18 13:00:59

C#枚舉類型
點贊
收藏

51CTO技術棧公眾號