如何在 C# 中封送集合以传递给本机 (C++) 代码

2023-11-25

我正在从事企业应用程序开发。整个应用程序都是用 C++ 开发的,除了 UI 是用 C# 开发的,现在是时候将 UI 与 C++ 代码挂钩了。经过详细研究,我选择了 PInvoke 来实现这一点。 一切都很成功,我唯一遇到的问题是如何将集合传递给 C++ 代码。 例如:

C# 边代码

List<string> lst = new List<string>();
lst.Add("1");
lst.Add("2");
lst.Add("3");
lst.Add("4");

C++ 边代码

std::vector<std::string> vStr;

现在我如何将 lst 传递给本机 C++ 代码


正如 mzabsky 提到的,您无法封送这些类型。但是,您可以编组数组:

理论上的 C++ 导出:

extern "C" __declspec(dllexport) void __stdcall Foo(wchar_t const* const* values, int length)
{
    // Check argument validity...

    // If you really need a vector
    std::vector<std::wstring> vStr(values, values + length);

    //...
}

P/调用签名:

[DllImport("foo.dll")]
static extern void Foo([MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPWStr)] string[] values, int length);

来自 C# 的调用:

Foo(lst.ToArray(), lst.Count);

请注意,我在这里使用 std::wstring ;您可以使用 char 代替 wchar_t,使用 LPStr 代替 LPWStr,使用 std::string 代替 std::wstring。

请注意,这将从列表中分配一个数组,然后向量将复制该数组的内容。如果原始列表的大小很小,那么这个问题应该可以忽略不计。

编辑:修复标记(< 和 >)。

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

如何在 C# 中封送集合以传递给本机 (C++) 代码 的相关文章

  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var

随机推荐

  • 如何在Python中获取匹配行之后的行

    我是一个业余爱好者 断断续续地使用 Python 一段时间了 抱歉 如果这是一个愚蠢的问题 但我想知道如果输入文件中的格式如下所示 是否有人知道一种简单的方法来获取一堆行 标题 1 Line 1 Line 2 Line 3 标题 2 Lin
  • 创建忽略鼠标和按键事件的 JavaFX 透明窗口

    我想制作一个 JavaFX 应用程序 基本上用一个覆盖整个用户屏幕Canvas对象 所以基本上我可以在用户屏幕上绘制任何内容 制作一个覆盖整个屏幕的窗口很简单 通过本教程可以使其基本上透明 https assylias wordpress
  • 用Java计算两个日期之间的天数

    我想要一个计算两个日期之间的天数的 Java 程序 输入第一个日期 德语表示法 带空格 dd mm yyyy 输入第二个日期 该程序应计算两个日期之间的天数 如何包含闰年和夏令时 My code import java util Calen
  • 响应式 UI 提示

    当我想创建响应式用户界面时 我只想要一些提示 我知道如何使用 Dispatcher Task BackgroundWorker Threads 我正在寻找更多高级提示 例如绑定提示 当我的 UI 上有 50 多个控件需要更新时 Priori
  • 缺少 python bz2 模块

    我已经安装在我的主目录中 spatel dev1 home spatel python 2 7 3 bin python V Python 2 7 3 我正在尝试运行一个需要 python 2 7 x 版本的脚本 但出现丢失 bz2 错误
  • 可以通过 Apache 下载文件吗?

    Path var lib foo txt 是否可以配置 Apache 以便有一些 HTTP URL 可以启动该文件的下载以及如何配置 Without htaccess file 那么那个 URL 会是什么 localhost var lib
  • Google 云存储 CNAME URL 重定向

    我在 Google Cloud 存储上有一个公共存储桶 wordgamesswf 可以通过网址访问对象http commondatastorage googleapis com wordgamesswf linguistics 我需要托管我
  • 原型还是内联,有什么区别?

    我刚刚学习 Javascript 我想知道是否使用原型声明 如下所示 function TSomeObj this name my object TSomeObj prototype showname function alert this
  • Pickle 类实例加上定义?

    我怀疑这是一个常见问题 但我还没有找到解决方案 我想要的非常简单 而且在技术上似乎是可行的 我有一个简单的 python 类 我想将它存储在光盘上 实例和定义在一个文件中 Pickle 将存储数据 但不存储类定义 有人可能会说类定义已经存储
  • 如何使 jenkins 在 Windows 批处理命令失败时失败?

    我在 jenkins 中使用一些 Windows 批处理命令 其中每个命令都可能失败 为了使 jenkins 作业在每一步都失败 这些批处理命令如下所示 net use m IP ADDRESS Whatever PASSWORD user
  • 在 Android 中直接将捕获的图像上传到 Cloudinary

    我想捕捉一张图片并直接上传到Cloudinary 我如何知道图片的名称以在上传声明中设置它cloudinary uploader upload nameofthepic Cloudinary emptyMap 这是我的代码 public c
  • 正则表达式捕获两个分隔符内单词的每次出现

    假设我有一长串文本 我想捕获每个单词this是在圆括号内提到的 我怎么能这么做呢 以下模式仅匹配第一个this 忽略之后出现的每一个事件 this g 例如 在以下文本上使用上面的模式 Etiam scelerisque nunc ac e
  • 使用 iText5 for .NET 读取 PDF 文件

    我使用 C 作为编程平台iTextSharp阅读 PDF 内容 我使用下面的代码来读取内容 但似乎是每页读取的 public string ReadPdfFile object Filename string strText string
  • 如何在其他类中使用PDO连接?

    我认为我在理解 OOP 的工作原理方面存在问题 我已经更改了它可以工作的代码 但这不是我认为的正确方式 以下场景 不 我不是自己创建用户登录 它实际上只是为了本地开发人员更好地理解 OOP 我有一个database php 文件 class
  • iOS Safari 隐私浏览 localStorage 和 sessionStorage 支持吗?

    我在 StackOverflow 上发现了一些问题 解决了 iOS Safari Private Browsing 的特定功能和sessionStorage and localStorage 但我还没有找到明确的资源来表示 iOS Safa
  • WebRequest 不发送客户端证书

    我正在为 REST API 编写一个客户端 为了对 API 进行身份验证 我必须使用提供给我的证书 这段代码如下 public string GetCustomer int custId X509Certificate2 Cert new
  • fgetcsv 正在吃掉字符串的第一个字母(如果它是变音符号)

    我正在将 Excel 生成的 CSV 文件中的内容导入到 XML 文档中 例如 csv fopen csvfile r words array while pair fgetcsv csv FALSE array push words ar
  • TurboParser 的依赖解析输出是什么意思?

    我一直在尝试使用由生成的依赖解析树CMU 的 TurboParser 它工作完美 但问题是文档太少 我需要精确理解他们的解析器的输出 例如 这句话 我用统计方法解决了这个问题 生成以下输出 1 I PRP PRP 2 SUB 2 solve
  • 如何让 Protractor 不等待 $timeout?

    我正在使用 Protractor 测试我的角度应用程序 用户登录到我的应用程序后 我设置了 timeout 以在一小时内完成某些工作 因此 如果用户在 13 00 登录 timeout 将在 14 00 运行 我不断遇到这些失败 Timed
  • 如何在 C# 中封送集合以传递给本机 (C++) 代码

    我正在从事企业应用程序开发 整个应用程序都是用 C 开发的 除了 UI 是用 C 开发的 现在是时候将 UI 与 C 代码挂钩了 经过详细研究 我选择了 PInvoke 来实现这一点 一切都很成功 我唯一遇到的问题是如何将集合传递给 C 代