在VB.Net中可用的指针技术?

问题描述

VB.Net中没有显式地提供对指针的支持,这使访问一些非托管内存或调用一些API有很大的麻烦。在VB6中也有这样的问题,不过在众多高手的研究下,已经可以通过SafeArray模拟实现指针,从而大大提高了内存处理方面的速度。现在想问的是在VB.Net下有没有类似的方式来实现一个指针?也就是利用.Net提供的某些结构或者类型来绕过语言本身直接实现对内存的访问?marshal类里面的内存拷贝函数很麻烦,而且估计效率会很低,所以想要靠指针进行内存操作。

解决方案

解决方案二:
给你个例子参考一下ImportsSystem.Runtime.InteropServicesPrivateDeclareFunctionvAesSetKeyLib"cryp.dll"(ByValptr_OutKeyAsInteger,ByValptr_In_KeyAsInteger,ByValint_KeyLenAsLong)AsBooleanPublicSharedFunctionnAesSetKey(ByRefCtx()AsInteger,ByValAesKey()AsByte)AsBooleanReDimCtx(128)Array.Clear(Ctx,0,Ctx.Length)DimblnRtnAsBoolean=FalseDimAesKeyObjAsGCHandle=GCHandle.Alloc(AesKey,GCHandleType.Pinned)DimAesKeyPtrAsIntPtr=AesKeyObj.AddrOfPinnedObjectDimCtxObjAsGCHandle=GCHandle.Alloc(Ctx,GCHandleType.Pinned)DimCtxPtrAsIntPtr=CtxObj.AddrOfPinnedObjectblnRtn=vAesSetKey(CtxPtr.ToInt32,AesKeyPtr.ToInt32,128)IfAesKeyObj.IsAllocatedThenAesKeyObj.Free()IfCtxObj.IsAllocatedThenCtxObj.Free()AesKeyObj=NothingCtxObj=NothingAesKeyPtr=NothingCtxPtr=NothingReturnblnRtnEndFunction
解决方案三:
呵呵呵呵。。。真的没有吗VB.NET下有可能有点小问题,不过似乎不是很严重,这段时间写一些东西光用些该死的API了,由于根基不好,所以到现在也不懂得API到底干什么了,参数到底咋传。。。。反而沾光了,修改了N多API函数的声明。。。例如:PrivateDeclareFunctionReadProcessMemoryLib"kernel32"(ByValhProcessAsInteger,ByVallpBaseAddressAsInteger,ByVallpBuffer()AsByte,ByValnSizeAsInteger,ByReflpNumberOfBytesWrittenAsInteger)AsIntegerPrivateDeclareFunctionWriteProcessMemoryLib"kernel32"(ByValhProcessAsInt32,ByVallpBaseAddressAsInt32,ByVallpBuffer()AsByte,ByValnSizeAsInt32,ByReflpNumberOfBytesWrittenAsInt32)AsIntegerPrivateDeclareFunctionVirtualQueryExLib"kernel32"(ByValhProcessAsInt32,ByVallpAddressAsIntPtr,ByReflpBufferAsMEMORY_BASIC_INFORMATION,ByValdwLengthAsInt32)AsInt32PrivateDeclareFunctionVirtualProtectExLib"kernel32"(ByValhProcessAsInteger,ByVallpAddressAsIntPtr,ByValdwSizeAsInteger,ByValflNewProtectAsInteger,ByReflpflOldProtectAsInteger)AsInteger这几个API函数用来操作进程内存还是必要的,以上就是VB.NET下我修改的声明了。这时种方式,另外不是可以打包的吗?我觉得打包效率低一些,程序中又是按BYTE操作,就按上面改了,实际上打包也行。再者,System.Runtime.InteropServices名空间下的Marshal里面有很多指针转换的东西,例如前几天写那个该死的屏蔽WIN键的时候,就使用了一个API:SetWindowsHookEx,回调声明成了这个样子:PublicDelegateFunctionHookCallBack(ByValnCodeAsInteger,ByValwParamAsIntPtr,ByVallParamAsIntPtr)AsInteger那在函数处理的时候,就需要从指针转换到结构:PublicStructureKeyboardHookStructPublicvkCodeAsIntegerPublicscanCodeAsIntegerPublicflagsAsIntegerPublictimeAsIntegerPublicdwExtraInfoAsIntegerEndStructure使用DimnewPtrAsKeyboardHookStruct=CType(Marshal.PtrToStructure(lParam,newPtr.GetType()),KeyboardHookStruct)就可以实现转换了。。。。我觉得Marshal还是有用的。。以上只是个人见解,偶是业余爱好者。。。。技术方面谈不到水平啦~~~~:)
解决方案四:
应该可以吧
解决方案五:
谢谢上面诸位的回答,不过现在需要的是一个可以访问内存的指针,而且效率要高,以便在大规模处理内存数据的时候方便。有人知道VB.Net下面的Array具体是什么结构吗?在内存中的结构是什么样子的?
解决方案六:
MARK!!
解决方案七:
顶下,大家一起来讨论啊。昨天做了测试,使用Marshal的WriteByte方法,效率相当的低,比数组访问至少慢700倍。显然不能用它来作为访问内存的工具了。难道真得先把内存从非托管区域Copy过来,处理完了再Copy过去?相当浪费空间啊。
解决方案八:
看来貌似没有人回答了?……

时间: 2024-09-20 16:47:34

在VB.Net中可用的指针技术?的相关文章

CSS中的滑动门技术

css 原文作者:Douglas Bowman 原文出自:A List Apart 中文翻译:54player.com nobita 版权说明:本文中文翻译版权归译者54player.com nobita所有.需要转载发表的,请先与作者联系 在CSS中,一个经常被人们讨论的先进之处即背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果.根据CSS2.0当前的规定,每一个背景图像都需要各自的HTML元素.在许多情况下,典型的标记已经为一般的接口组件提供了多种元素以供我们使用. 标

CSS中的滑动门技术研究

css 在CSS中,一个经常被人们讨论的先进之处即背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果.根据CSS2.0当前的规定,每一个背景图像都需要各自的HTML元素.在许多情况下,典型的标记已经为一般的接口组件提供了多种元素以供我们使用. 标签导航栏就是其中的一个例子.过去,我们频繁的使用这些标签,并已成为了一种非常流行的站点导航方式.现今,在CSS已被广泛支持的前景下,我们可以为我们站点制作出更高质量和更好外观的标签导航栏来.你也许知道CSS可以用来"驯服"无

VB编程中钩子的实现及应用

编程 前言 Windows系统中钩子具有相当强大的功能,通过这种技术可以对几乎所有的Windows 系统中的消息进行拦截.监视.处理.这种技术可以广泛应用于各种软件,尤其是需要有监控.自动记录等对系统进行监测功能的软件.本文针对这个专题进行了探讨,希望可以为读者朋友们起到抛砖引玉的作用. 一.钩子的机制及类型 Windows的应用程序都是基于消息驱动的,应用程序的操作都依赖于它所得到的消息的类型及内容.钩子与Dos中断截获处理机制有类似之处.钩子(Hook)是Windows消息处理机制的一个平台

在VB项目中使用资源文件

项目 很多VB项目使用的数据存储在扩展文件中,包括bmp图片,icons图标,指针和wav文件.在你的安装中这些元素作为分开的单独文件有两个缺点. 首先,它可能在大量的文件中混乱安装:但是,如果一个用户删除或者不经意的移动文件中的任何内容,程序就不会正常运行.第二,文件中的材料对于用户来说使用是非常自由的,有可能用户所使用的方法是你不希望的. 你可以使用资源文件来避免上面的这些问题.使用资源文件的另外一个好处就是你可以创造特别版本的资源文件包括在不同的地方安装. 一个VB项目仅仅只有一个和它相关

CSS中的滑动门技术_CSS/HTML

作者:nobita 2005-5-8 9:39:31ISSN: 1534-0295. 20 October 2003 – Issue No. 160 原文作者:Douglas Bowman 原文出自:A List Apart 中文翻译:54player.com nobita 版权说明:本文中文翻译版权归译者54player.com nobita所有.需要转载发表的,请先与作者联系 在CSS中,一个经常被人们讨论的先进之处即背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果.根

VB.net中HOOK的应用(CNET中文网)

中文 VB.net中HOOK的应用 在vb.net版做版主有一阵子了,一直在思考怎么能更好地帮助大家理解vb.net的新概念与编程方法.小小的回贴很难说清楚很多问题,所以利用一下文档中心这片广阔的天地,进行更深入的探讨.本人水平有限,不免错误与遗漏多多,请朋友们批评指正. 基本的想法是,写一系列的文章,讲解一下vb.net与vb的区别,vb.net中的新概念,vb.net控件的使用,vb.net解决问题的新方法.如果时间允许,我希望自己能快快开展这个工作.更重要的是网友们的支持与鼓励会是我继续的

VB.net中HOOK的应用(一)

本文不是讲解Hook原理的文章,仅是讨论一下在vb.net如何调用Hook功能,以及vb.net中API使用的变化问题. 由于Hook种类较多,本文中以最常用的键盘Hook为例进行分析. 一.先来看一下在vb中是如何实现的.截的是空格键.表现的目标是:一个form,上面有一个textbox,不管焦点是否落在textbox里,按空格键,不会在textbox中输入一个空格,而是变成在textbox中写入一句话:"HOOK成功!" 1.在一个Module中写入下列代码: 调用的API的申明:

JSP中SQL数据库编程技术

js|编程|数据|数据库   JSP中SQL数据库编程技术一,SQL复习 1,SQL语句分为两类:DDL(Data Definition Language)和DML(Dat Manipulation Languge,数据操作语言).前者主要是定义数据逻辑结构,包括定义表.视图和索引;DML主要是对数据库进行查询和更新操作. 2,Create Table(DDL):  Create Table tabName(   colName1 colType1 [else],   colName2 colT

以前搜集的一些资料---如何在ASP中实现错误陷阱技术

错误 如何在ASP中实现错误陷阱技术(即实现VB中的所谓的On Error GoTo)代码如下(一共4个文件)1.error1.asp(用来生成错误)<html><head><title>输入数据</title></head> <body> <form method="POST" action="error2.asp" name="form1">  <div