如何使用 P/Invoke 在 C# 中返回列表?

2023-12-01

我正在开发一个小项目,我使用 P/Invoke 并希望在 C# 中返回以下内容:

public: class std::list<int,class std::allocator<int> > const * __thiscall TransactionsModule_t::GetTransactionList(void)const

现在这就是我困惑的地方:

[DllImport("TransactionManager.dll", EntryPoint = "...", CallingConvention = CallingConvention.ThisCall)]
public static extern ??? GetTransactionList(
    IntPtr interfacePtr);

我有点不知道从哪里开始寻找,因为我无法直接看到返回类型是什么,显然它是一种列表。我明白了这么多,但它是一个嵌套列表吗?也许是一本字典Dictionary<int,List<int>>?


你不可以做这个。 AFAIK 模板类型不能与 P/Invoke 一起使用,可能是因为运行时无法计算出列表的长度/如何分配和释放所需的内存量等。

最好的选择是编写一个 C++/CLI 包装器,或者将 C++ 中的返回类型更改为 int 数组,或者将参数传递给可以在 C++ 端填充的方法(输出参数)。

您可能认为 C# 列表和 std::list 可以以两种方式编组,但事实并非如此。

相关问题:编组 .NET 泛型类型

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 P/Invoke 在 C# 中返回列表? 的相关文章

  • 更改 Visual Studio 2015 扩展中项目内的文件 ProjectItem 的内容?

    如何更改文件的内容 ProjectItem在给定的范围内Project 我想用字符串替换它的所有内容 这个问题有解决办法吗 我想做一些改变ProjectItem CS 文件 通过使用 VSIX 包 以及我现在看到的唯一一种执行此操作的方法
  • 除了第一列之外,Gridview 行可点击?

    我使用以下代码使 gridview 的整行可单击 protected void gridMSDS RowDataBound object sender GridViewRowEventArgs e if e Row RowType Data
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • 将 Visual Studio 2012 C++ 单元测试项目链接到 exe 会导致访问冲突

    我从现有的整体 exe 本机 Visual Studio 2012 项目开始 我想添加一个本机单元测试项目 根据http msdn microsoft com en us library hh419385 aspx objectRef ht
  • 为什么 CMake 不通过在定义该变量之前创建的 CMAKE_CXX_STANDARD 将语言标准编译标志添加到目标?

    我在用着cmake version 3 22 1 and c Ubuntu 11 3 0 1ubuntu1 22 04 11 3 0 以及非常简约的CMakeLists txt 我无法让 CMAKE 使用 C 20 Setting set
  • 混合 VS2012 平台工具集

    我们正在从 VS2005 切换到 VS2012 update 2 我们正在构建大量 主要是控制台 本机 C 无 MFC ATL 可执行文件 它们使用几个常见的静态链接库 这些可执行文件主要在 Win7 计算机上运行 但有些也部署在较旧的 X
  • C# 列表框 ObservableCollection

    我正在尝试使用 ListBox DataSource ObservableCollection 但是我不知道如何在 OC 更新时让列表框自动更新 我可以在 OC 上挂接 CollectionChanged 事件 但是我需要对列表框执行什么操
  • 接口中的私有成员

    是否可以在 NET 接口中创建私有成员 我听说现在可以了 但我的 IDE 拒绝了 public interface IAnimal void SetDefaultName string name ChangeName name privat
  • 为什么long long 2147483647 + 1 = -2147483648? [复制]

    这个问题在这里已经有答案了 为什么这段代码不打印相同的数字 long long a b a 2147483647 1 b 2147483648 printf lld n a printf lld n b 我知道int变量的最大数量是2147
  • 当应用程序未聚焦时监听按键

    我有一个应用程序 C 4 0 WPF 它是隐藏的 可以通过单击系统托盘图标或我创建的其他框架 停靠在左侧和最上面的小框架 来显示 My customer wants to add a new way to display the appli
  • C#中如何将委托转换为对象?

    我正在使用反射类来调用其他 dll 上的一些方法 方法的参数之一是委托类型 我想通过使用反射来调用这个方法 所以我需要将函数参数作为对象数组传递 但我找不到任何关于 如何将委托转换为对象 提前致谢 委托是一个对象 只需像平常一样创建预期的委
  • 从 Linq 的列表中选择多个字段

    在 ASP NET C 中 我有一个结构 public struct Data public int item1 public int item2 public int category id public string category
  • 那里有更好的 DateTime.Parse 吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道有一个库 付费或免费 能够处理比 DateTime Parse 使用的更常见的日期时间格式 能够
  • 如何定义 Swagger UI 参数的默认值?

    我已将 Swagger Swashbuckle 集成到 NET Core 2 2 API 项目中 一切都很好 我的要求纯粹是为了方便 考虑以下 API 方法 public Model SomeEstimate SomeRequest req
  • 是否可以从.NET Core中间件检索控制器的操作结果?

    public class UsersController APIControllerBase public UsersController public Client Get return new Client ClientID 1 Las
  • 正则表达式基于组的不同替换?

    所以我对正则表达式比较陌生 并且做了一些练习 我正在玩一个简单的 混淆器 它只是寻找 dot or dot or at or at 不区分大小写 并且在匹配项之前或之后有或没有任意数量的空格 这是针对通常情况的 someemail AT d
  • Python 中的 C 指针算术

    我正在尝试将一个简单的 C 程序转换为 Python 但由于我对 C 和 Python 都一无所知 这对我来说很困难 我被 C 指针困住了 有一个函数采用 unsigned long int 指针并将其值添加到 while 循环中的某些变量
  • 访问 Visual Studio 扩展中的当前代码窗格

    我正在编写一个 Visual Studio 2010 扩展 在代码视图中带有右键单击菜单 我希望能够从菜单项事件处理程序检查当前代码 但无法在对象模型中找到执行此操作的位置 如何在 Visual Studio 扩展中访问当前窗口中的代码 E
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi
  • 从哪里开始阅读 SQLite 源代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想了解sqlite是如何实现的 并且 想阅读源代码 我已经下载了源代码 我应该开始查看代码的哪一部分 SQLite文档页 http

随机推荐

  • 单击剧作家中的浏览器权限弹出窗口,无需 grantPermission

    我正在尝试和剧作家一起写测试 我的应用程序使用摄像头和麦克风 所以 我允许他们使用context grantPermissions camera microphone 它适用于 Chrome 但不适用于 Firefox 和 Safari 尚
  • Android volley 处理重定向

    我最近开始使用 Google 的 Volley lib 来处理我的网络请求 我的一个请求收到重定向错误 301 所以我的问题是 volley 是否可以自动处理重定向 或者我是否必须手动处理它parseNetworkError或使用某种Ret
  • 将 gprof 与 pthread 结合使用

    gprof 可以用来分析使用 pthread 的多线程程序吗 也就是说 它的输出是否包括所有线程所使用的时间 是的 借助所描述的解决方法是可能的here
  • 如何将类转换为 Dictionary

    我可以将 Class 转换为 Dictionary 吗 在字典中我希望我的类属性为keys以及特定财产的价值value 假设我的班级是 public class Location public string city get set pub
  • JavaScript 减少两个以上项目的抛出错误

    我有这个数组 const arr someProp amount 10 someProp amount 12 然后减少 fn const sum arr reduce prev curr gt prev someProp 0 amount
  • 使用 awk 最长的行

    有人可以展示如何使用 awk 命令来识别文本文件中最长的行 Thanks 要打印最长的行 awk length gt m m length a 0 END print a input file 简单地通过行号来识别最长的行 awk leng
  • JQ:将键替换为另一个文件中的相应值

    我正在尝试将原始 JSON 中的键值替换为另一个文档中具有相应键的对象的值 这是我的两个文件 文件一 KaM0otlgWxXniYiacFe LNxx1IiX6oYTxJ4IXx2 true KlJTvbfonIMI YfS5R LNxx1
  • 替换 Excel 文件页眉和页脚上的文本

    我想检查 Excel 工作表上的页眉和页脚 并将给定字符串的所有出现位置替换为另一个字符串 如何使用 vba 来完成此操作 你需要使用才能使用Sheet PageSetup财产 我假设您正在寻找中心页眉和页脚 以下内容将为您工作 Sub L
  • 使用 UIBezierPath 擦除线条图

    使用 UIBezierPath 做了一个简单的线条绘制应用程序 但现在需要一种方法来擦除用 UIBezierPath 绘制的线条 有没有办法实现橡皮擦功能来删除线条画 如果您使用图像作为背景 那么您可以将相同的图像设置为画笔图案来绘制贝塞尔
  • SQL Presto:不支持相关子查询

    考虑表x id val 1 100 3 300 和表y id 1 2 3 对于每一行y我想要val from x哪里的id从 y 等于或最接近之前id from x像那样 id val 1 100 2 100 3 300 我试图找到与相关子
  • R 中的自举相关

    我正在尝试在 R 中进行引导相关性 我有两个变量 Var1 和 Var2 我想获得 Pearson 相关性的自举 p value my variables look like this x y 1 6080522 1 707642 2 1
  • SQL Group By 和 Order By

    我有一个标签表 想从列表中获取计数最高的标签 示例数据如下所示 id 1 tag night id 2 tag awesome id 3 tag night using SELECT COUNT Tag from images tags G
  • 基于条件的最大值

    我在 Excel 中有一个模拟数据集 我想打印最近的日期 但我希望它是最新的日期 以便类型为 引用 Type Date referral 1 6 2017 classroom 1 7 2017 referral 1 8 2017 class
  • Mac 上的 jshint 和 sublimelinter 设置配置

    我正在尝试在我的 Mac 上配置 sublimelinter 特别是 jshint 在我的 Windows 版本的 SublimeText 上有以下部分SublimeLinter sublime settings jshint option
  • Terraform:通知 SNS 的 CloudWatch 事件

    我正在学习 TF 并尝试应用一个基础设施来创建 一个简单的 lambda 函数 SNS 话题 获取 lambda 来订阅 SNS 主题 以一定时间间隔向主题发布消息的 Cloud Watch Event Cloud Watch Log Gr
  • XDocument.Validate 始终成功

    我有一个架构文件 它没有定义任何目标命名空间 即它的定义如下所示
  • Hive 上的 Spark SQL 查询执行

    我是 Spark SQL 新手 但了解 Hive 查询执行框架 我想了解spark如何执行sql查询 技术说明 如果我按照命令开火 val sqlContext new org apache spark sql hive HiveConte
  • 如何使 setInterval 在一段时间或多次操作后停止?

    我用 jQuery 创建了一个 改变单词 的循环 通过使用此答案中的代码 jQuery 查找单词并每隔几秒更改一次 一段时间后如何停止 是说 60 秒后还是循环结束后 function List your words here var wo
  • 格式化 pandas 中的数字

    对于 pandas DataFrame df min max mean a 0 0 2 300000e 04 6 450098e 02 b 0 0 1 370000e 05 1 651754e 03 c 218 0 1 221550e 10
  • 如何使用 P/Invoke 在 C# 中返回列表?

    我正在开发一个小项目 我使用 P Invoke 并希望在 C 中返回以下内容 public class std list