`
zu14
  • 浏览: 459666 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类

C#中VarPtr的实现

阅读更多

VarPtr 是 VB 中的一个函数,这个函数的作用,是返回变量的地址,说白了就是一个指针,但是,.Net平台放弃了指针,采用了委托,对于托管代码,.Net 的限制较多,这也跟 .NET 平台的本身定位有关系。

VarPtr在 C# 和 VB.NET 中,都不存在了,但是,在使用.NET平台,做一些外设的二次开发的时候,有时还是需要用到类似 VarPtr 的功能,例如: USB 设备接口, COM设备等。

这里,给出一个 VarPtr 的 在 .NET 平台下 C# 的实现方法:

int VarPtr(object e)
{
    System.Runtime.InteropServices.GCHandle gh = System.Runtime.InteropServices.GCHandle.Alloc(e, System.Runtime.InteropServices.GCHandleType.Pinned);
    int gc = gh.AddrOfPinnedObject().ToInt32();
    gh.Free();
    return gc;
}
    

这个代码的使用方式,和 VB 的 VarPtr 是一致的,希望能帮到有需要的朋友吧。

分享到:
评论

相关推荐

    精彩编程与编程技巧-VarPtr、StrPtr和ObjPtr函数的用法...

    在深入探讨VarPtr、StrPtr和ObjPtr函数的用法之前,我们首先应当明确这些函数在编程中的核心作用。VarPtr、StrPtr和ObjPtr分别用于获取变量、字符串和对象的内存地址,它们是高级编程中处理底层内存操作的关键工具。...

    c#实现的crc16

    在C#中实现CRC16,需要理解其基本原理和算法。 CRC的工作原理基于多项式除法。在给定的数据上执行一个特定的数学运算,得到一个16位的校验和。这个校验和与原始数据一起发送,接收端再做同样的运算,如果计算出的...

    用shared_ptr实现多线程对全局变量的读写,copy-on-write技术

    参考陈硕的多线程服务端编程>>,中的用shared_ptr实现copy-on-write技术,不过这里的线程采用的是c++11的线程库

    C#实现winform自动关闭MessageBox对话框的方法

    本文将详细介绍如何在C#的Winform环境中实现这一功能。 首先,我们需要了解`MessageBox`的基本用法。`MessageBox.Show()`函数是用于显示`MessageBox`的标准方法,它接受字符串参数作为显示的消息和可选的标题。例如...

    C#中调用C++中动态链接库DLL中的结构体

    本文将深入探讨如何在C#中调用C++ DLL中包含结构体的函数,以实现两者的有效协作。 首先,我们需要理解C#和C++之间的一些关键差异。C++允许直接操作内存,而C#则通过垃圾回收机制自动管理内存,这在处理结构体时...

    C#调用C++DLL导出类

    在.NET环境中,C#代码通常与C++代码交互是通过平台调用(P/Invoke)或托管C++来实现的。然而,当涉及到C++动态链接库(DLL)中的类时,情况会变得稍微复杂一些。本文将详细介绍如何在C#中调用C++DLL中的类,以及如何...

    C#与CoDeSys共享内存例程

    本教程将深入探讨如何利用C#编程语言与CoDeSys(Control Development System)控制系统通过共享内存来实现高效的数据交换。这种方式避免了传统的串行通信或网络通信(如Modbus、TCP/IP)带来的延迟和复杂性,特别...

    03 C#与C++dll互相传递字符串.rar

    本示例探讨的是如何在C#环境下调用C++编写的动态链接库(DLL),并实现两者之间字符串参数的有效传递。下面我们将详细讨论这个过程。 首先,C#和C++之间的互操作性是通过.NET Framework的Platform Invoke (P/Invoke...

    c# 获取图片主色调方法

    本文将深入探讨如何使用C#实现这一功能,主要涉及.NET框架中的颜色处理技术。 首先,我们需要理解“主色调”这个概念。主色调通常是指一张图片中最突出、最显著的颜色,它代表了图片的整体色彩倾向。获取主色调的...

    C#结构体和C++字节数组的转换

    本文将详细介绍如何在C#中实现结构体与字节数组之间的转换。 首先,我们需要在C#中定义一个结构体,以便能够存储我们要传递的数据。这里的关键是使用`System.Runtime.InteropServices`命名空间,并通过`...

    C# 调用C++DLL(函数参数包含指针)

    在.NET框架中,C#是一种常用的编程语言,而C++DLL是基于C++编译的动态链接库,常用于提供底层系统级的功能。有时我们需要在C#应用中调用C++DLL来利用这些功能。本篇文章将深入探讨如何在C#中调用一个C++DLL,特别是...

    c#实现的数字图像二值化

    在本篇文章中,我们将深入探讨如何使用C#来实现数字图像的二值化处理,并对提供的代码进行详细的解析。二值化是图像处理中的一个重要环节,尤其在文档扫描、字符识别等领域有着广泛的应用。 ### 一、二值化的概念与...

    c#结构体和byte之间的转换

    下面将详细介绍如何在C#中实现这种转换,特别是当结构体内部包含数组时。 首先,我们需要了解结构体到字节数组的转换。这个过程称为序列化(Serialization)。C# 提供了多种方法来实现序列化,其中最简单的是使用`...

    C#中的指针和内存管理以及垃圾回收PPT

    ### C#中的指针、内存管理及垃圾回收详解 #### 指针(Pointer) 在C#编程语言中,虽然直接操作指针的情况较为少见,但确实存在某些应用场景下需要使用到指针。C#设计初衷是为了提供一种更加安全且易于管理内存的方法...

    VB利用地址偏移访问内存.rar

    VB利用地址偏移访问内存,整个处理过程 封装在事件函数中,用户单击后,执行以下代码:  Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length...

    C#调用C++动态链接库,函数为地址传递

    本主题聚焦于"C#调用C++动态链接库,函数为地址传递"这一技术,我们将深入探讨如何实现这样的互操作性,以及在这个过程中需要注意的关键点。 首先,让我们理解动态链接库(DLL)的概念。DLL是一种共享代码的机制,...

    C#调用C++生成的DLL,并返回结构体引用或者结构体指针多个值

    在.NET框架中,C#与C++之间的互操作性是通过Platform Invoke(P/Invoke)服务实现的,允许C#代码调用C++编写的动态链接库(DLL)。本话题聚焦于C#如何调用C++生成的DLL,并且接收返回的结构体引用或结构体指针,从而...

    C#实现的数据结构源码

    //编写算法,在二叉树中查找值为value的结点 public Node<T> Search(Node<T> root, T value) { Node<T> p = root; if (p == null) { return null; } if (!p.Data.Equals(value)) { return p; } if ...

    gray_C#读取图片方式内存法_指针法_

    在C#编程中,处理图像数据时,有多种方法可以实现。其中,内存法和指针法是两种常见的技术,特别是在高效处理大量图像或者进行低级别图像操作时。本篇文章将详细探讨这两种方法,以及如何在C#中利用它们来读取图片。...

    C#调用C++的DLL

    在跨语言编程中,有时我们需要在C#应用中利用C++编写的动态...通过以上步骤,我们可以成功地在C#中调用C++的DLL,实现两者之间的数据交换。在实际开发中,理解这些细节对于构建健壮和高效的跨语言应用程序至关重要。

Global site tag (gtag.js) - Google Analytics