网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

如何使用c#的IntPtr

本篇内容主要讲解“如何使用c#的IntPtr”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用c#的IntPtr”吧!

创新互联建站主要从事成都网站制作、成都网站建设、外贸营销网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务英山,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

ccalldll2.cpp中:

int  retstruct(user* u,int x,int y)
{
    u->id += 10 + x;
    u->age += 10 + y;
    return 0;
}

在c#中:

[DllImport("ccalldll2.dll", EntryPoint = "retstruct",CallingConvention=CallingConvention.Cdecl)]
        public static extern int retstruct(IntPtr ptrUser, int x, int y); //在引用中只引用了ccalldll2,而ccalldll2又用到了cSharpDLLforJNA,这样有问题吗
        [StructLayout(LayoutKind.Sequential)]
        struct user
        {
            public int id;
            public int age;
        };
        private void btnInptr_Click(object sender, EventArgs e)
        {
            user u = new user();
            u.id = 5;
            u.age = 7;
            //先要通过Marshal来分配内存空间,根据user的大小进行分配非托管空间大小
            int size = Marshal.SizeOf(u);//对于值类型,可以Sizeof(变量),对于引用类型则Sizeof(typeof(TYPE))
            IntPtr ptruser = Marshal.AllocHGlobal(size);//分配内存
            //将u的值copy到ptruser空间
            Marshal.StructureToPtr(u, ptruser, false);           
            int res = retstruct(ptruser, 5, 5);//调用DLL中函数 retstruct中将对ptruser指针所指的user中的id和age处理
            user u2 = (user)Marshal.PtrToStructure(ptruser, typeof(user));//将处理之后的ptruser再转换为user
            Console.WriteLine(u2.id + ":" + u2.age);
            Console.WriteLine(res+":"+u.id+":"+u.age);
            Marshal.FreeHGlobal(ptruser);
        }

显示结果:

20:22
0:5:7

到此,相信大家对“如何使用c#的IntPtr”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


新闻名称:如何使用c#的IntPtr
当前网址:http://bjjierui.cn/article/jhpigh.html

其他资讯