成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#調用Windows API之參數類型淺析

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

C#調用Windows API之參數類型是什么樣子的呢?

C#調用Windows API之參數類型1、

數值型直接用對應的就可。

(DWORD -> int , WORD -> Int16)

C#調用Windows API之參數類型2、

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

C#調用Windows API之參數類型3、

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

C#調用Windows API之參數類型4、

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

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

LayoutKind.Explicit 用于控制每個數據成員的精確位置。利用 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#調用Windows API之參數類型實例說明:

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

  1. /**********************************************  
  2. * API中定義原結構聲明  
  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中聲明為結構  
  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特性,它用于描述字段、方法或參數的封送處理格式。用它作為參數前綴并指定目標需要的數據類型。例如,以下代碼將兩個參數作為數據類型長指針封送給 Windows API 函數的字符串 (LPStr):

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

C#調用Windows API之參數類型注意事項:

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

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

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

【編輯推薦】

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

2009-08-17 13:18:01

C#調用Windows

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-17 13:49:20

C#中調用Window

2009-08-03 13:34:57

C#調用Windows

2009-07-31 16:12:10

Windows APIC#

2009-08-24 15:02:05

C# 類型

2009-08-04 09:30:33

C#調用ImageAn

2009-08-25 17:59:49

C#入門

2009-08-25 16:16:27

C#調用Windows

2009-07-31 17:28:35

C#語言調用DLL

2009-08-14 09:15:28

C#調用構造函數

2009-08-12 10:35:50

C#調用ActiveX

2009-08-18 10:35:46

C#枚舉類型

2009-08-18 12:52:33

C#枚舉類型

2009-08-06 10:14:15

C#引用類型數組

2009-09-04 18:16:19

C# Main參數C# Main

2009-08-28 15:57:56

C#線程傳遞參數

2009-08-06 17:57:14

C# webServiC# WebServi

2009-08-18 09:37:14

C#枚舉類型

2009-08-18 13:00:59

C#枚舉類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91p在线观看 | 浴室洗澡偷拍一区二区 | 日韩国产在线观看 | 亚洲五码久久 | 一区二区福利视频 | 欧美精品在线一区二区三区 | 成人在线看片 | 亚洲免费大片 | 91视频在线 | 日本久久网 | 在线观看亚洲精品视频 | 国产高清免费视频 | 国产美女自拍视频 | 欧美激情国产日韩精品一区18 | 国产亚洲高清视频 | 亚洲欧美男人天堂 | 四虎影院在线免费观看 | 在线日韩欧美 | 欧美日韩一区不卡 | 欧美日韩久久久久 | 日韩电影免费在线观看中文字幕 | 日本污视频 | 亚洲第一视频网 | 日本三级电影在线看 | 久久久.com| 性欧美hd | 午夜专区 | 狠狠操狠狠操 | 国产精品一区二区在线 | 国产成人jvid在线播放 | 一区二区三区不卡视频 | 国产精品久久久久久久久久 | 91国产精品在线 | 欧美13videosex性极品 | 免费在线观看av片 | 欧美精品一二三 | 精品久久精品 | 美女天堂在线 | 久久精品视频亚洲 | 欧美成人精品一区二区男人看 | 亚洲另类自拍 |