千家信息网

如何使用c#的IntPtr

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"如何使用c#的IntPtr",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何使用c#的IntPtr"吧!ccalldll2.cpp中:i
千家信息网最后更新 2026年10月31日如何使用c#的IntPtr

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

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# 空间 分配 内存 内容 大小 类型 处理 学习 实用 更深 兴趣 函数 变量 实用性 实际 将对 所指 指针 操作简单 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技 中国 科技 互联网 广州善班互联网科技 阿里互联网科技公司 互联网科技有哪些公司 岳阳华臻互联网科技有限公司 黑科技闪耀互联网之光 语蝶互联网科技有限公司 湖南一路畅行互联网科技 新兴科技互联网创新大赛颁奖典礼 互联网科技数字货币 富国互联网科技002692 卡尔迅互联网科技有限公司 宁波跨境商互联网科技有限公司 互联网界的黑科技 上海万顺科技互联网有限公司招聘 数字互联网科技有限公司 杭州科技互联网公司有哪些 知域互联网科技有限公司官网 每日互联网科技新闻 互联网是不是新科技 科技创新互联网企业 安控科技rtu产品工业互联网 哈尔滨新华互联网科技学院 剑昆互联网络科技有限公司临桂 语蝶互联网科技有限公司 恒生互联网科技业指数调整周期 互联网公司高科技产品 昆明中奇联合互联网科技 黑龙江互联网科技公司
0