PInvoke 和 char**

2023-12-01

我从某人那里得到了这个程序集,我想在我的 C# 应用程序中使用它。

标题看起来像这样:

int __declspec(dllimport) s2o(WCHAR* filename, char** out, int* len);

我设法让它部分工作,使用:

[DllImport("s2o.dll", EntryPoint = "?skn2obj@@YAHPA_WPAPADPAH@Z", CallingConvention = CallingConvention.Cdecl)]
public static extern int s2o(
    [MarshalAs(UnmanagedType.LPWStr)]
    string filename,
    ref char[] @out,
    ref int len
);

然后这样称呼它:

char[] result = null;
int length = 0;
s2o("filepath", ref result, ref length);

它似乎部分有效,因为“长度”实际上得到了一个值。 不幸的是,“结果”仍然为空。

我应该怎么做才能让它发挥作用?

Edit:

好吧,我设法通过用 IntPtr 替换 char[] 开始工作,然后像 Nick 建议的那样调用“Marshal.PtrToStringAnsi”:

string result = Marshal.PtrToStringAnsi(ptr);

但是,由于同一答案中的评论,我有点担心内存使用情况。程序集中没有提供其他方法,那么我该如何清理呢?


关于你的最后一个问题:

  • char是单个字符。
  • char*是一个指向字符的指针。如果将其解释为字符串,则内存中紧随该内存地址的所有数据都将被视为属于该字符串,直到遇到 0x0 的值。通过一个char*进入方法意味着该方法可以更改字符串的内容,但不能更改其长度。
  • char**是一个指向 char 的指针。将其传递给方法意味着该方法能够创建新字符串并将新地址返回给调用者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PInvoke 和 char** 的相关文章

  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • gcc 的配置选项如何确定默认枚举大小(短或非短)?

    我尝试了一些 gcc 编译器来查看默认枚举大小是否很短 至少一个字节 强制使用 fshort enums 或无短 至少 4 个字节 强制使用 fno short enums user host echo Static assert 4 si
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 在 SharePoint 2010 中编辑 SQL 扩展属性

    如何在 SharePoint 2010 中编辑表的扩展属性 到目前为止 我认为没有任何 开箱即用 的东西可以做到这一点 因此 我假设这意味着我必须创建一个自定义 Web 部件来提取表的扩展属性 然后允许我对其进行编辑 然后在编辑完成后 We
  • 设备实例 ID 的驱动器盘符

    如何从驱动器号获取设备实例 ID 我的流程从设备到达消息开始 我已成功从到达消息中获取驱动器盘符并打开 DVD 托盘 我搜索了各种Setup API项 但我还没有找到任何可以让我从驱动器号到设备实例 ID 的信息 C 或 VB NET 中的
  • 如何将查询结果分解为单独的列?

    接续我之前的问题 要作为列插入表中的栅格记录的像素值 想象一下我的查询结果有 5300 行 结果如下 value 15624 15899 56267 85955 我希望它们位于表格中 前 53 行位于val1列 第二 53 行val2专栏等
  • BigQuery - 对数组进行分组

    我想对数组进行分组 示例查询 standardSQL WITH project dataset table AS SELECT compute description key application value scaled server
  • Firebase runloop (3.0.0) 中未捕获的异常。请向 [email protected] 举报 [已关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我的离线功能有问题 我使用 firebase 在我的项目中打开离线功能 一切都很好 直到我完全关闭应用程序并重新打开它 它造成了崩溃 这是日志 05 23 07 44 58 407 7
  • JUCE 和 React Native - 链接器错误“ld:未找到 -lReact 的库”

    我在使用 CocoaPods 和 React Native 时遇到此链接器错误 ld library not found for lReact 我已按照指南进行操作https facebook github io react native
  • 在flaskext.mysql中寻找dictcursor的等价物

    我编写了一个Python Flask应用程序 最初使用MySQLdb来访问MySQL 后来我出于同样的目的切换到flaskext mysql 但现在当我使用这个模块时 我看不到如何获取字典结构的游标 当我使用 MySQLdb 模块时 我使用
  • WTForms-JSON 不适用于 FormFields

    当我使用 WTForms JSON 时 嵌套表单 FormFields 不会填充数据 我无法发现我的错误 请参阅下面的示例 from flask import Flask request jsonify from flask wtf imp
  • 管理两个 UI 的最佳方法是什么?

    我创建了两个用户界面 如何关闭第一个并激活下一个 Google Apps 脚本下是否可以有两个 UI 我尝试过类似的事情 var app UiApp getActiveApplication app add app loadComponen
  • Matlab:字符串数组中的数字数组索引(无循环)

    我正在做 MIT OCW MATLAB 入门课程中的一系列问题 你可以看到here 这是问题 9 第 g iii 部分 我有一个矩阵 其中包含一门课程的最终成绩 所有成绩的范围都从 1 到 5 我还有另一个数组 其中仅包含字母 F to A
  • 在构造的字符串上使用 execvp 的问题

    我正在尝试编写一个 shell 其构造的一部分是从用户输入的字符串 缓冲区 执行代码 然而 当我尝试使用附加输入 ae echo a 执行 execvp 字符串时 它总是会搞砸并返回 1 我不知道为什么 这是相关的部分 char buffe
  • 万事达卡的正则表达式

    我找到了信用卡类型 MasterCard 的以下正则表达式 public static readonly string CreditMasterCard 5 1 5 0 9 14 然后我写了下面的代码 Regex regexMasterCa
  • 如何获取多维数组的交集?

    我有一个多维数组的数组 每个数组代表一个搜索结果集 我正在尝试找出如何过滤这组数据以仅包含每个数组中存在的数组 注意 下面显示的索引各自代表多维数组 每个数组都有一个深度嵌套的Id可用于比较的键 The Id位于 reference var
  • PlaceAutocompleteFragment 无法解析

    在我的应用程序中 我添加了谷歌地图 它们工作正常 我想添加一个 PlaceAutocompleteFragment 我正在使用已经为地图生成的密钥 并且我已启用来自 google console 的 Places Api 选项 我已将这些添
  • 处理 AdWhirl 失败

    您好 我正在开发一个 Android 应用程序并使用 AdWhirl 来显示我的广告 我希望能够处理 AdWhirl 不返回广告的情况 当它失败时 我想显示一个装饰栏 谁能给我举个例子吗 提前致谢 好吧 我现在已经弄清楚了 有两种可能的方法
  • 如何读取单个Excel单元格值

    我有一个带有sheet1的Excel文件 其中有一个我需要在第2行和第10列读取的值 这是我的代码 Excel Workbook excelWorkbook excelApp Workbooks Open workbookPath 0 fa
  • 是否有 GCC 关键字允许结构重新排序?

    我知道为什么 GCC 默认情况下不重新排序结构的成员 但我很少编写依赖于结构顺序的代码 那么有什么方法可以将我的结构标记为自动重新排序吗 以前的 GCC 版本有 fipa struct reorg option允许结构重新排序 fwhole
  • 使用VBA将图片插入Excel并保持宽高比不超过尺寸

    我正在将Access数据库中的数据导出到Excel报告中 报告中需要包含的部分内容是与数据对应的图片 图片存储在共享文件中并插入到 Excel 文件中 如下所示 Dim P As Object Dim xlApp As Excel Appl
  • 具有相同哈希码的两个 Java 对象不一定相等吗?

    我理解为什么为两个相等的提供相同的哈希码 通过equals 对象很重要 但反之亦然 如果两个对象具有相同的哈希码 它们是否必须相等 合同还有效吗 我找不到可能发生这种情况的示例 因为如果参与 equals 方法的所有这些属性也都用于覆盖 h
  • PInvoke 和 char**

    我从某人那里得到了这个程序集 我想在我的 C 应用程序中使用它 标题看起来像这样 int declspec dllimport s2o WCHAR filename char out int len 我设法让它部分工作 使用 DllImpo