C#的指针

原创 2007年09月27日 09:11:00

对于C#来说,指针是没有任何意义的,写这个完全是爱好.业务的时候,写了个测试指针的类.测试了一下.感觉还可以

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace Test
{
    /// <summary>
    /// 测试C#数据存取
    /// </summary>
    class TestModel
    {
        struct TestStruct
        {
            public int a ;
            public string b;
        }

        private char[] str1 = "1".ToCharArray();
        private char[] str2 = "2".ToCharArray();
        public static TestModel kkk = new TestModel();

        public static void test()
        {
            TestStruct mm = new TestStruct();
            test2 kk = new test2();
            System.Console.WriteLine(Convert.ToString((Int64)Marshal.GetIUnknownForObject(mm)));
            System.Console.WriteLine(Convert.ToString((Int64)Marshal.GetIUnknownForObject(kk)));
            System.Console.ReadLine();
        }

        public static void testStruct()
        {
            TestStruct ttt = new TestStruct();
            TestModel t = TestModel.kkk;

            ttt.a = 1;
            char[] str1 ="3".ToCharArray();
            char[] str2 ="4".ToCharArray();
            ttt.b = "5";

            unsafe
            {
                IntPtr ptr = Marshal.GetIUnknownForObject(ttt.b);
                System.Console.WriteLine(Convert.ToString((Int64)ptr));

                IntPtr ptr3 = Marshal.GetIUnknownForObject(str1);
                System.Console.WriteLine(Convert.ToString((Int64)ptr3));

                IntPtr ptr2 = Marshal.GetIUnknownForObject(str2);
                System.Console.WriteLine(Convert.ToString((Int64)ptr2));

                System.Console.WriteLine("t.str1="+Convert.ToString((Int64)Marshal.GetIUnknownForObject(t.str1)));
                System.Console.WriteLine("t.str2="+Convert.ToString((Int64)Marshal.GetIUnknownForObject(t.str2)));

                System.Console.WriteLine(Convert.ToString((Int64)Marshal.GetIUnknownForObject(t)));

                int a1 =2;
                int a3 = 3;
                int a4 = 4;
                int a5 = 5;

                System.Console.WriteLine(Convert.ToString((Int64)(&a1)));
                System.Console.WriteLine(Convert.ToString((Int64)(&a3)));
                System.Console.WriteLine(Convert.ToString((Int64)(&a4)));
                System.Console.WriteLine(Convert.ToString((Int64)(&a5)));
            }

            System.Console.WriteLine(Convert.ToString(Marshal.SizeOf(ttt)));
            System.Console.ReadLine();
        }

        public unsafe static void TestString()
        {
            string a = "abc";
            System.Console.WriteLine(Convert.ToString((Int64)Marshal.GetIUnknownForObject(a)));
            test(a);
            System.Console.ReadLine();
        }

        public unsafe static void test(string str)
        {
            IntPtr ptr = Marshal.GetIUnknownForObject(str);
            str = "123";
            object t = Marshal.GetObjectForIUnknown(ptr);
            System.Console.WriteLine(t.ToString());

            System.Console.WriteLine(Convert.ToString((Int64)Marshal.GetIUnknownForObject(str)));
        }

    }

    public class test2
    {
        int a;
        int b;
        string a2;
        string b2 = "abc";
    }
}
 

C#指针简单运用

  • 2013年09月16日 12:59
  • 926B
  • 下载

C#中的IntPtr类型(指针等用)

c#中无法将类型“int”隐式转换为“System.IntPtr” 这个是我引用了一个api函数时出现的问题,我在声明中把intptr换成了int还是不可以,这是为什么呢?要如何处理呢?   答: ...

c#实现指针钟

  • 2013年06月21日 13:55
  • 36KB
  • 下载

C#调用C++ 平台调用P/Invoke 结构体--含有内置数据类型的一维、二维数组、字符串指针【六】

【1】结构体中含有内置数据类型的一维数组 C++代码: typedef struct _testStru3 { int iValArrp[30]; WCHAR szChArr[30]; }t...

C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针

 C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针 在这个系列的“C#调用C++DLL的小总结6---C++Dll中指针的释放问...

C#调用CDLL带指针参数的函数

  • 2009年04月16日 16:04
  • 36KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#的指针
举报原因:
原因补充:

(最多只允许输入30个字)