从使用ReadProcessMemory方法了解的ref和out
2006-01-08 19:54
477 查看
昨天在用winapi中的ReadProcessMemory方法,因为是在c#中使用所以需要将ReadProcessMemory方法的调用转成c#的形式.于是查了一下http://www.webtropy.com/articles/Win32-API-DllImport-art9.asp网站上的方法,格式为
不废话,立刻调用,然后发现照这个方法调用,怎么都取不到内存中的数据,经过在网上查找其他资料,发现有人是将lpBaseAddress的类型定义为int或IntPtr,这样都可以取到了,所以发现lpBaseAddress是不能定义为object的.
而且对于object也决不能使用ref的形式,因为大家都知道ref关键字是传递参数的引用地址,本身引用类型的数据作为参数传递的时候就是将引用传递了过去,那再加上ref关键字的话就是将引用的引用传递了过去,这样在传递参数lpBuffer的时候会抛出未将对象引用设置到对象实例的异常,这也是可以理解的,如果改为out参数的话就不会出现这个问题,但是在本来就是传递了一个引用类型的参数时使用out参数也没有什么意义,有点画蛇添足的味道.
具体的ref和out关键字的区别说明可以看一下这个blog,我觉得说明的还是比较清楚了
http://iheshi.cnblogs.com/articles/132852.html
[DllImport("kernel32.dll", SetLastError=true)] static extern int ReadProcessMemory ( int hProcess, ref object lpBaseAddress, ref object lpBuffer, int nSize, ref int lpNumberOfBytesWritten) |
而且对于object也决不能使用ref的形式,因为大家都知道ref关键字是传递参数的引用地址,本身引用类型的数据作为参数传递的时候就是将引用传递了过去,那再加上ref关键字的话就是将引用的引用传递了过去,这样在传递参数lpBuffer的时候会抛出未将对象引用设置到对象实例的异常,这也是可以理解的,如果改为out参数的话就不会出现这个问题,但是在本来就是传递了一个引用类型的参数时使用out参数也没有什么意义,有点画蛇添足的味道.
具体的ref和out关键字的区别说明可以看一下这个blog,我觉得说明的还是比较清楚了
http://iheshi.cnblogs.com/articles/132852.html
相关文章推荐
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- Readprocessmemory使用方法
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryError: Java heap space
- Ref 与 Out 的使用方法及区别
- C#方法参数传递-同时使用ref和out关键字
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryError: Java heap space
- C# Error CS1628: 不能在匿名方法、lambda 表达式或查询表达式中使用 ref 或 out 参数
- C#中的ref和out的意义和使用方法