c# 获取非托管指针长度

public List<string> GetPDFValues()
        {
            List<string> strs = new List<string>();
            unsafe
            {
                var len = 0;
                //调用c++ 返回char**
                var a = GaussianDistributionServiceProxy.GetPDFValues();

                var cx = 0;                //获取char**指针长度 start
                while (true)
                {
                    var result = Marshal.PtrToStringAnsi((IntPtr)(*(a + cx)));
                    if (result == null)
                    {
                        len = cx - 1;
                        cx = 0;
                        break;
                    }
                    cx++;

                }
       //获取char**指针长度 end
//char** 转换为List<string>for (int i = 0; i < len; i++) {   string s = Marshal.PtrToStringAnsi((IntPtr)a[i]);   strs.Add(s); } } return strs; }
时间: 2024-08-02 21:56:27

c# 获取非托管指针长度的相关文章

浅谈 .NET 中的对象引用、非托管指针和托管指针

目录 前言 一.对象引用 二.值传递和引用传递 三.初识托管指针和非托管指针 四.非托管指针 1.非托管指针不能指向对象引用 2.类成员指针 五.托管指针 前言 本文主要是以 C# 为例介绍 .NET 中的三种指针类型(本文不包含对于函数指针的介绍):对象引用.非托管指针 .托管指针. 学习是一个不断深化理解的过程,借此博客,把自己关于 .NET 中指针相关的理解和大家一起讨论一下,若有表述不清楚,理解不正确之处,还请大家批评指正. 开始话题之前,我们不妨先对一些概念作出定义. 变量:给存储单元

C# 托管和非托管混合编程

在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难. 最直接的实现托管与非托管编程的方法就是使用C++/CLI 介绍 项目存档一直是企业的采用的做法,而是事实证明他们也是对的!对于一个程序员,这是几千men-days的工作量.为什么不开发一小段代码去重新利用那段代码,项目. 现在提供了一个渐渐的转向C#的新技术: 使用托管与非托管的混合编程.这是一个可行的方案在top-down issue(f

VB.NET 内存指针和非托管内存的应用

介绍 Visual Basic 从来不像在C或C++里一样灵活的操纵指针和原始内存.然而利用.NET框架中的structures 和 classes,可以做许多类似的事情.它们包括 IntPtr,   Marshal 以及 GCHandle. 这些structures(结构) 和classes(类) 允许你在托管和非托管环境中进行交互.本文中将向您展示如何使用这些structures 和 classes 去完成指针和内存的操作. 关于 IntPtr 结构 IntPtr  结构的行为像一个整型指针

优化字符串拼接之二:非托管内存应用

前(tu)言(cao) 之前一篇虽然也强调了,可是回复中还是有人来挑刺,并且还有人支持?! #5楼2013-08-26 21:39 楼主看下StringBuilder的makeroom方法吧.微软官方的,有些东西不是人家做不到,而是人家考虑的更多. 所以我不得不再次强调一下,系统是考虑的很多,但是我不需要这么多功能可以吗?我只希望他快一点,(对我来说)更好用一点. 就好比,如果你只想拧螺丝,你会选择瑞士军刀,还是选择螺丝刀?! 你见过多少维修师傅带着一把瑞士军刀去你家修东西的? 当维修师傅拿出一

如何让IntPtr指向一块内存,以及托管内存与非托管内存的相互转化

IntPtr idp= IntPtr.Zero; StringBuilder idata = new StringBuilder("000000"); string idata ="000000"; 我这样建立的2个idata字符串,如何让idp指向他 我指向他的目的是为了传递给dll的某个函数,他需要传指针 还有我定义了一个结构如何向dll的函数传递其指针? 所有分了,解决一起结了 用GCHandle.Alloc(object obj)方法来给string分配一个

.NET的堆和栈04,对托管和非托管资源的垃圾回收以及内存分配

在" .NET的堆和栈01,基本概念.值类型内存分配"中,了解了"堆"和"栈"的基本概念,以及值类型的内存分配.我们知道:当执行一个方法的时候,值类型实例会在"栈"上分配内存,而引用类型实例会在"堆"上分配内存,当方法执行完毕,"栈"上的实例由操作系统自动释放,"堆"上的实例由.NET Framework的GC进行回收. 在" .NET的堆和栈02,值类型和

[原]C#与非托管&mdash;&mdash;初体验

P/Invokes初看起来非常简单,利用DllImport进行extern函数的声明,程序就可以在调用extern函数的时候自动查询调用到对应的非托管函数,有些类似Java的native函数,但更为简单,不需要编写相应的C函数导出.例如 [DllImport(LIB, CallingConvention = CallingConvention.Cdecl)] public static extern void testfunc(); 简单的P/Invokes封装可以把C库头文件的函数全部复制过来

在C#调用C++的DLL简析(一)——生成非托管dll

经过一晚上的折腾,还是下点决心将些许的心得写下来,以免以后重复劳动. C#与C/C++相 比,前者的优势在于UI,后者的优势在于算法,C++下的指针虽然恶心,若使用得当还是相当方便的,最重要的问题是,市面上很多流行的开发工具库,几乎没 有不支持C++的,但全面支持C#只能说是难得,在CPU发展到今天,若说C#的执行效率跟C++相比有很大的差距并不是那么靠谱,若非万不得已我还是宁 愿用C#来写代码,调试什么的也很方便. 不得已的情况下,要在C#下使用C++的函数或类,最好的方式就是使用动态 链接库

CSharpGL(36)通用的非托管数组排序方法

如果OpenGL要渲染半透明物体,一个方法是根据顶点到窗口的距离排序,按照从远到近的顺序依次渲染.所以本篇介绍对 UnmanagedArray<T> 进行排序的几种方法. +BIT祝威+悄悄在此留下版了个权的信息说: UnmanagedArray<T> 首先重新介绍一下非托管数组这个东西.一个 UnmanagedArray<float> 与一个 float[] 是一样的用处,只不过 UnmanagedArray<float> 是用 Marshal.Alloc