使用数组参数调用本机函数

2023-12-07

我完全不知道如何使用数组参数调用本机 dll 中的函数。

Example:

该函数在 C# 项目中定义为:

[DllImport("Project2.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
static extern void modifyArray([MarshalAs(UnmanagedType.LPArray)] int[] x, int len);

函数调用是:

modifyArray(arr, 3)

其中 arr = {4,5,6}

原生C++函数定义如下:

extern "C" _declspec(dllexport) void modifyArray(int* x,int len)
{   
        int arr[] = {1,2,3};
        x = arr;
}

为什么在C#项目中,函数调用后数组没有指向新数组?它仍然是{4,5,6}。

我尝试过但失败了

[DllImport("Project2.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
static extern void modifyArray([In,Out] int[] x, int len);

每当我尝试使用指针修改传递给这些函数的参数时,此 pinvoke 都会失败。否则,我已成功传递本机 dll 排序函数的 ref 数组参数,其中新创建的类型没有指针更改。


您的 C++ 代码已损坏。调用者分配数组,被调用者填充它。像这样:

extern "C" _declspec(dllexport) void modifyArray(int* x, int len)
{   
    for (int i=0; i<len; i++)
        x[i] = i;
}

就您的 p/invoke 调用而言,SetLastError不应该是true。该函数没有调用SetLastError。它应该是:

[DllImport("Project2.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void modifyArray(int[] x, int len);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用数组参数调用本机函数 的相关文章

随机推荐

  • 如何在 MVC 中更改由 @Html 帮助程序生成的“data-val-number”消息验证

    假设这个模型 Public Class Detail
  • 在 doxygen 布局中添加新用户选项卡

    我是使用 doxygen 1 8 7 的新手 我正在尝试将架构图添加为使用 doxygen 为我的 C 项目生成的 API 文档的一部分 我生成了默认的 doxygen 布局文件 DoxygenLayout xml 并通过添加以下更改来编辑
  • 将 ID 更改为其他字符串时链接 URL 中断

    我在 URL 示例 service detail 1 中有 ID 该 ID 工作正常 后来我将路由重定向到 service detail abc 但该 url 不起作用 我不确定错误是什么 我得到的路线像
  • Symfony2 记录 404 错误

    我需要能够在发生 404 错误时记录 接收电子邮件 我可以在文档中看到如何为这些错误设置新模板 但是如何首先在控制器中捕获它们 以便可以实现日志记录 电子邮件逻辑 也许添加一个监听 kernel exception 事件的事件监听器就可以了
  • 更新 MongoDB 中的嵌套对象(如果存在),否则添加它

    我在 mongoDB 中有一个像这样的 json 文档 id ObjectId 57ed88c0965bedd2b11d5727 refid 2 votes ip 127 0 2 1 rating 5 ip 127 0 3 1 rating
  • Java InputStream 在线程中关闭

    我正在尝试从线程中的输入流读取 线程应该运行的类如下所示 static private class Runner implements Runnable private InputStream fis private OutputStrea
  • 通过 REST 工具测试 WebAuthn?

    是否可以通过休息工具在本地进行测试 我已经创建了后端来生成用于注册新信用的质询等 但是如果没有 WebAuthn 响应 如果我创建了正确的方法来消化来自 WebAuthn 的响应对象 我就会不知所措 如果您正在编写 FIDO2 WebAut
  • Eclipse JavaDoc 生成失败并出现 IllegalArgumentException?

    当我尝试为任何 javadoc 注释类导出或生成 javadoc 时 我总是收到错误 直到最近它才生成完全空的 html 文件 这是我之前收到的错误 Constructing Javadoc information Standard Doc
  • 如何使用 Material-UI ThemeProvider 和 createGenerateClassName 避免类名冲突

    想知道是否有人可以阐述如何避免这样一种情况 React 应用程序使用 makeStyles 中的material ui classNames 并且其中包含一个也执行此操作的包 因此有两个名称生成器 导致多个相互冲突的 jss1 jss2 等
  • 在 R/Tidyeval 中的 RHS 上使用类胶水结构

    我花了几个小时试图在公式的 RHS 上粘上胶水 但没有任何线索 这是一个简单的表示 meta lt function x var suffix x lt x gt mutate var suffix 5 x lt x gt mutate v
  • 复杂 JSON 对象的 C# 数据协定

    这可能是非常简单的事情 我到处寻找并尝试了我能想到的一切 因此 如果这是一个简单的搜索并且我只是在寻找错误的东西 我深表歉意 我对数据契约和 JSON 也很陌生 所以这可能并不是那么复杂 我正在创建一个 API 来摄取 JSON 并将其存储
  • UIScrollView滚动时如何向一个方向移动

    我是 Objective c 的新手 我创造UIScrollView对象并使用以下代码添加到我的视图中 height self view frame size height width self view frame size width
  • Woocommerce aJax 将优惠券代码应用到购物篮

    我试图在按下按钮时将优惠券代码应用到购物篮 我有以下代码 coupon jQuery this data coupon data coupon code coupon jQuery post wc ajax apply coupon cou
  • cin 还是 printf?

    在使用 c c 工作时 1 cin cout 或者 2 scanf printf 两者中哪一个的执行或运行时间会更少 或者两者都有相同的运行时间 我的目标是减少代码的运行时间 投注相对时间控制台IO功能是恕我直言 没有任何实际用途 这是完全
  • 在单个服务器上单独的 Git 部署

    我希望我的应用程序中有一个功能 允许用户在版本之间进行更改 特别是查看冲刺之间应用程序的差异 用户只需从下拉列表中选择一个版本 Sprint A Sprint B 等 页面就会刷新 显示当时应用程序的状态 这本身应该不是什么太大的问题 我认
  • 强大的哈希字符串函数并恢复它

    我正在寻找一个强大的哈希函数 算法 来对我的代码进行哈希处理 我想将散列字符串恢复为原始字符串 我可以恢复sha到原来的 你能帮助我吗 您无法从哈希恢复原始数据 因为它在设计上是不可逆的 通常的解释是鸽巢原理 大多数哈希值约为 128 25
  • 创建框架时 Xcode 8 中未找到 filename.h 文件错误

    我正在尝试使用以下步骤创建一个框架https www raywenderlich com 65964 create a framework for ios 我已将框架文件导入到项目中 我可以为框架文件创建对象并访问方法 但是当我构建项目时
  • Android - WebView 不播放 YouTube 视频

    我有一些 WebView 代码 我试图用它在 YouTube 频道上播放 YouTube 视频 但它所做的只是在视频上显示旋转图标 而从未真正启动视频 有人知道如何解决这个问题吗 public class YoutubeActivity e
  • PHP 回发 url 谷歌钱包 IAP

    我的谷歌钱包应用内支付的回发 php 如下所示
  • 使用数组参数调用本机函数

    我完全不知道如何使用数组参数调用本机 dll 中的函数 Example 该函数在 C 项目中定义为 DllImport Project2 dll SetLastError true CallingConvention CallingConv