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**二级指针,实现字符串数据的获取和内部存储。

    上一篇:HTTP 错误 500.21 - Internal Server Error 发布网站遇到这个错误
    下一篇:c++动态调用DLL库(加载“无法读取内存”错误的解决方案)

    发表评论

    最新留言

    能坚持,总会有不一样的收获!
    [***.219.124.196]2025年05月06日 17时15分26秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章