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

C#操作內(nèi)存實(shí)例詳解

開(kāi)發(fā) 后端
C#操作內(nèi)存實(shí)例向你介紹了C#操作內(nèi)存的原理和實(shí)現(xiàn)的步驟,以及C#操作內(nèi)存時(shí)需要注意的事項(xiàng),希望對(duì)你的學(xué)習(xí)有所幫助。

C# 操作內(nèi)存是如何實(shí)現(xiàn)的呢?讓我們開(kāi)始講解吧:

我們先來(lái)看看C#中如何操作內(nèi)存,也就是非托管的數(shù)據(jù)。這需要引用System.Runtime.InteropServices命名空間。該命名空間下的Marshal的一些靜態(tài)方法提供了這樣的功能:

  1. Marshal.ReadInt32()  
  2. //從指定內(nèi)存地址讀取4位 C#操作內(nèi)存  
  3. Marshal.PtrToStringAnsi()  
  4. //從指定內(nèi)存地址讀取字符串C#操作內(nèi)存   
  5. Marshal.WriteInt32()  
  6. //將整數(shù)寫(xiě)到指定內(nèi)存地址 C#操作內(nèi)存  
  7. Marshal.WriteByte()  
  8. //將字符串寫(xiě)到指定內(nèi)存地址我們來(lái)看看具體的代碼:   
  9. using System;   
  10. using System.Text;   
  11. using System.Runtime.InteropServices;   
  12.  
  13. internal sealed class RCEvent {   
  14. public int Event;   
  15. public int Flag;   
  16. public string User;   
  17. };   
  18.  //C#操作內(nèi)存
  19. internal sealed class RCEventAgent {   
  20. internal static RCEvent Read(IntPtr ptr){   
  21. RCEvent Event = new RCEvent();   
  22.    
  23. Event.Event = ReadEvent(ptr);   
  24. Event.Flag = ReadFlag(ptr);   
  25. Event.User = ReadUser(ptr);   
  26.  
  27. return Event;   
  28. }   
  29.  //C#操作內(nèi)存
  30. internal static int ReadEvent(IntPtr basePtr) {   
  31. return Marshal.ReadInt32(basePtr);   
  32. }   
  33. internal static int ReadFlag(IntPtr basePtr) {   
  34. return Marshal.ReadInt32(basePtr,4);   
  35. }   
  36. internal static string ReadUser(IntPtr basePtr) {   
  37. return Marshal.PtrToStringAnsi(  
  38. new IntPtr(basePtr.ToInt32() + 8));   
  39. }   
  40.  
  41. internal static void Write(ClientEvent Event,IntPtr ptr) {   
  42. WriteEvent(ptr,Event.Event);   
  43. WriteFlag(ptr,Event.Flag);   
  44. WriteUser(ptr,Event.User);   
  45. }   
  46.  //C#操作內(nèi)存
  47. internal static void WriteEvent(  
  48. IntPtr basePtr,int value) {   
  49. Marshal.WriteInt32(basePtr,value);   
  50. }   
  51. internal static void WriteFlag(  
  52. IntPtr basePtr,int flag) {   
  53. Marshal.WriteInt32(basePtr,4,flag);   
  54. }   
  55. internal static void WriteUser(  
  56. IntPtr basePtr,string user) {   
  57. WriteString(basePtr,user,8,40);   
  58. }   
  59. private static void WriteString(  
  60. IntPtr basePtr,string value,int offset,int length) {   
  61. int pos = 0;   
  62. byte[] bytes = Encoding.Default.GetBytes(value);   
  63. while(pos ﹤ length) {   
  64. if (pos ﹤ bytes.Length)   
  65. Marshal.WriteByte(basePtr,offset,bytes[pos]);   
  66. else   
  67. Marshal.WriteByte(basePtr,offset,0);   
  68.  
  69. pos ++;   
  70. offset ++;   
  71. }   
  72. }   //C#操作內(nèi)存

這樣我們就可以通過(guò)ReadEvent和WriteEvent直接在c#中處理該結(jié)構(gòu)體。或者通過(guò) ReadXXX() 和 WriteXXX() 直接修改其字段。

  1. public void DoSomething(IntPtr ptr){   
  2. RCEvent Event = RCEventAgent.Read(ptr);   
  3. Event.Flag ++;   
  4. RCEventAgent.Write(ptr, Event);   
  5.  
  6. // 或者以下代碼   
  7. // RCEventAgent.WriteFlag( ptr, RCEventAgent.ReadFlag(ptr) + 1 );   

C++中則可以直接將結(jié)構(gòu)體地址傳給C#:

  1. #using   ﹤mscorlib.dll﹥   
  2. #using   ﹤CuteSuProc.dll﹥   
  3.  
  4. void SomeMethod(RCEStruct* pEventStruc){   
  5. MyCSharpDll::DoSomething(pEventStruc);   

C#操作內(nèi)存的具體內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#操作內(nèi)存有所幫助。

【編輯推薦】

  1. C#操作文本文件之添加文本操作淺析
  2. C#操作文本文件應(yīng)用實(shí)例簡(jiǎn)析
  3. C#操作文本文件演練實(shí)例淺析
  4. C#操作內(nèi)存之指針淺析
  5. C#操作內(nèi)存讀寫(xiě)方法淺析
責(zé)任編輯:仲衡 來(lái)源: 博客園
相關(guān)推薦

2009-08-18 17:05:08

C#操作xml文件

2009-08-20 11:07:07

C#共享內(nèi)存

2009-09-02 17:12:06

C#關(guān)機(jī)代碼

2009-08-18 10:14:19

C#插件構(gòu)架

2009-09-11 12:31:52

C#實(shí)例詳解TypeConvert

2009-08-18 13:49:21

C# 操作Excel

2009-08-19 16:09:15

C#操作Access

2009-08-28 12:47:30

C#靜態(tài)方法應(yīng)用

2009-08-28 13:12:56

C#反射實(shí)例C#反射

2009-09-02 19:12:37

C#遞歸

2009-09-07 05:50:59

C# Timer用法

2009-09-01 11:25:08

C#讀取Word文件

2009-08-21 10:13:02

C#異步初步

2009-09-04 18:09:12

C# Main函數(shù)

2009-08-26 11:07:36

C#打印窗體

2009-08-26 11:32:37

C#打印文檔

2009-08-26 09:22:44

C#實(shí)現(xiàn)打印功能

2009-08-18 16:04:12

C# 操作Excel

2009-08-19 09:42:52

C#操作Word書(shū)簽

2009-08-31 18:38:59

C#寫(xiě)文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产亚洲精品精品国产亚洲综合 | 国产999在线观看 | 亚洲热在线视频 | 日本欧美在线观看视频 | 亚洲欧美中文字幕在线观看 | 中文久久| 精品1区2区3区4区 | 中文字幕人成乱码在线观看 | 九九热国产精品视频 | 日日天天| 欧美激情视频一区二区三区在线播放 | 欧美性精品 | 日韩在线中文字幕 | 免费在线观看av的网站 | 在线观看中文字幕视频 | 91人人澡人人爽 | 国产精品区一区二区三 | 亚洲午夜在线 | 91成人免费看片 | 日日综合 | 精品国产欧美一区二区三区不卡 | 国产精品久久一区 | 久久国内精品 | 国产欧美日韩综合精品一 | 一区二区三区高清 | 99精品国自产在线 | 国产成人av免费看 | 国产高清自拍视频在线观看 | 黄色网址在线播放 | 亚洲国产成人精品久久久国产成人一区 | 精品视频久久久久久 | 亚洲国产中文字幕 | 久久大陆 | 精品一区在线 | 日韩国产一区二区三区 | 亚洲综合小视频 | 亚洲在线| 一区二视频 | 日本一区二区三区在线观看 | 精品99久久久久久 | 午夜免费在线 |