将非托管 char** 封送至托管 string[]

2023-12-11

我在 DLL 文件中有一个 C++ 函数(它是使用多字节字符集选项编译的):

_declspec(dllexport) void TestArray(char** OutBuff,int Count,int MaxLength)
{
    for(int i=0;i<Count;i++)
    {
        char buff[25];
        _itoa(i,buff,10);

        strncpy(OutBuff[i],buff,MaxLength);
    }
}

我想接下来一定是 C# 原型:

    [DllImport("StringsScetch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
    private static extern void TestArray([MarshalAs(UnmanagedType.LPArray)] IntPtr[] OutBuff, int Count, int MaxLength);

但是我应该准备 IntPtr 对象来接收来自非托管代码的字符串吗?


因此 OutBuff 基本上是一个指针数组 - 因此您需要创建一个 IntPtr 数组,其元素是有效指针 - 即指向有效内存的 IntPtr 值。就像下面这样:

int count = 10;
int maxLen = 25;
IntPtr[] buffer = new IntPtr[count];

for (int i = 0; i < count; i++)
    buffer[i] = Marshal.AllocHGlobal(maxLen);

TestArray(buffer, count, maxLen);

string[] output = new string[count];
for (int i = 0; i < count; i++)
{
    output[i] = Marshal.PtrToStringAnsi(buffer[i]);
    Marshal.FreeHGlobal(buffer[i]);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将非托管 char** 封送至托管 string[] 的相关文章

随机推荐

  • ListView 自动调整大小以显示所有项目

    我想要创建的是一个列表视图 它将调整自身大小以显示所有项目 通常我会使用 AutoSize 但这在这里不起作用 还有其他选项如何使 ListView 扩展和收缩以适应所有情况 您必须手动计算所需的高度 并在添加 删除项目时进行设置 不直接支
  • magento 中的 Ajax(加载产品视图块)

    我想要实现的目标 单击产品链接 图像 至少在某些区域 可打开一个弹出窗口 其中包含完整的产品信息 基本上是产品视图页面的所有内容 到目前为止我所做的 尝试过的 创建了 ajax php 代码之外的所有内容 模块 链接 模板 重写 创建了 a
  • 将数据帧列表传递给 lm() 并查看结果

    我有三个数据帧 dfLON dfMOS 和 dfATA 每个都有相同的变量 y是连续变量 a b和c是二元分类变量 还有一些NA 我想建立单独的线性回归模型 每个数据集一个 使用我当前的代码 我已成功创建数据帧列表并将其传递到 lm 中 但
  • 测试时管道损坏(写入失败)> 允许的最大内容长度[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个测试来验证我的服务器拒绝大于 1MB 的请求 Scenario large requests are rejected Given url https my server com anythin
  • 添加带有材质表的组件会更改 Material-UI AppBar 样式

    我的应用程序正在使用 Material UI 和材料表 使用 ThemeProvider 作为子项在 index js 文件中应用全局主题 然后再有子项
  • 将 int 传递给函数,然后使用该 int 创建数组

    我正在尝试为我的 openGL 项目创建一个textureLoader 类 但无法在类构造函数内初始化纹理数组 因为该数组不会接受任何内容 除非它是 const int 给你画一幅简单的图画 myFunction NUM GLuint te
  • Laravel:使用 try...catch 和 DB::transaction()

    我们都用DB transaction 对于多个插入查询 这样做时 应该try catch放在里面还是包裹起来 是否还需要包括一个try catch如果出现问题 交易什么时候会自动失败 Sample try catch包装交易 try cat
  • HTML 画布悬停文本

    我有一个 HTML 画布 其中包含所有不同大小的不同形状 它是通过解析外部文件中的信息来构建的 我想知道如何制作 以便将鼠标悬停在每个形状上都会显示其唯一的名称 我找到了有关如何在鼠标悬停时显示文本的资源whole画布 但我需要每个单独的形
  • 以编程方式推广 QWidget

    我有一个 ui 文件 其中包含QProgressBar in a QWidget 此外 我创建了继承自的自定义进度条组件QProgressBar 在QT Designer中 我可以推广QProgressBar小部件到我的自定义小部件 有没有
  • 计算数组中的重复项[重复]

    这个问题在这里已经有答案了 我正在尝试显示数组的内容 但如果存在重复项 则仅打印名称和数字 例如 myArr apple apple orange apple banana orange pineapple 会显示 apple 3 oran
  • 无法使用 TesseractOCRConfig Apache Tika 提取扫描的 pdf

    我的 pdf 包含扫描图像 我想从中提取文本 我尝试过的 我尝试使用 AutoDetectParser 但没有输出 我按照中提供的解决方案进行操作Apache Tika 提取扫描的 PDF 文件还有 Apache Tika Jira 位于h
  • 使用 python 脚本发送嵌入图像的 html 电子邮件

    我是Python新手 我想发送基于 html 的电子邮件 并在电子邮件正文的左上角嵌入公司徽标 使用以下代码 电子邮件绝对可以正常工作 但不再附加嵌入的图像 不知道我哪里做错了 任何人都可以帮我吗 import smtplib from e
  • 在Python中读取文件并将值存储到变量中

    假设我有一个文件名 test txt 其中包含以下数据 AA11 BB11 CC11 DD11 AA22 BB22 CC22 DD22 AA33 BB44 CC44 DD33 在 bash shell 脚本 中我可以执行以下操作 cat t
  • 在以下任何来源中均未找到 Bumblebee Android studio 插件 [id: 'com.android.application', 版本: '7.1.0', apply: false]:

    我将我的 android studio 从 Android studio Fox 更新为 Android studio Bumblebee 2021 1 1 但我的项目都不能运行Android 工作室大黄蜂 2021 1 1 我最终得到了这
  • 使用 CSS 实现内部文本阴影

    我目前正在使用 CSS3 并尝试实现这样的文本效果 黑色模糊的内部阴影 但我找不到创建文本阴影的方法inside文本 我想知道这是否仍然可能 因为 box shadow 元素能够像这样在内部渲染阴影 box shadow inset 0px
  • Google 云存储签名 URL 上传 + Dropzone.js

    我正在尝试使用 Dropzone js 使用签名 URL 直接上传到 Google Cloud Storage 我已经设法覆盖添加到 Dropzone 的每个文件的上传 URL Chrome 开发工具说PUT请求正在发生 但我不可避免地收到
  • SOCKS5 连接超时 (GCDAsyncSocket)。 (OpenFire、XEP-0065 和 iOS XMPPFramework)

    Problem 我正在尝试使用 iOS XMPPFramework 和 OpenFire 服务器进行 TURNSocket XEP 0065 SOCKS5 我希望能够发送和接收文件 然而 在大多数情况下 接收方不会返回任何响应 我目前怀疑问
  • 如何在手机上点击网页链接时触发电话

    我需要为移动设备构建一个网页 只有一件事我还没弄清楚 如何通过点击文字来触发电话 有没有我可以输入的特殊网址 例如mailto 电子邮件标签 设备特定的解决方案不是首选 我知道 iPhone 会自动识别电话号码并为此创建一个链接 但如果也可
  • 自动布局,无需使用 Storyboards 或 Interface Builder

    我正在构建一个应用程序 我想完全避免使用 Storyboard 和 Interface Builder 因此所有 UI 都应该在代码中指定 我在用纯布局 一个很好的配置 APIAutoLayout限制 然而 我的问题是 它看起来像AutoL
  • 将非托管 char** 封送至托管 string[]

    我在 DLL 文件中有一个 C 函数 它是使用多字节字符集选项编译的 declspec dllexport void TestArray char OutBuff int Count int MaxLength for int i 0 i