
C#调用C++DLL二级指针处理方式
发布日期:2021-05-16 21:13:15
浏览次数:17
分类:精选文章
本文共 956 字,大约阅读时间需要 3 分钟。
在C#中调用C++的char**二级指针,可以通过以下步骤实现:
定义接收结构体:
- 创建一个C#结构体
Node
,其中包含一个string[]
数组,指定大小常数为2,即[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public string[] vs;
。
导入C++函数:
- 使用
[DllImport]
导入C++ DLL函数MGetAudioDevice
,并指定调用方式和字符集。
调用函数并转换指针:
- 调用
MGetAudioDevice
获取IntPtr。 - 使用
Marshal.PtrToStructure
将IntPtr转换为Node
结构体。
释放内存:
- 在完成后,释放IntPtr使用
Marshal.FreeHGlobal
,避免内存泄漏。
以下是具体代码示例:
using System;using System.Runtime.InteropServices;public struct Node{ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public string[] vs;}[DllImport("./Voip/VoipDLL/LIBTODLL.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern IntPtr MGetAudioDevice();private void btn_login_Click(object sender, EventArgs e){ IntPtr ssss = VoIP.MGetAudioDevice(); Node node = (Node)Marshal.PtrToStructure(ssss, typeof(Node)); Console.WriteLine(node.vs[0] + node.vs[1]); Marshal.FreeHGlobal(ssss);}
这样,C#程序就能正确接收和解析C++中的char**二级指针,实现字符串数据的获取和内部存储。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月06日 17时15分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Long型转成Calendar,并获取年月日操作
2019-03-15
1:ul居中文 2:字居中 3:去除ul和li前面的点
2019-03-15