时间:2019-03-17 标签:c#dllimportwithpointers

2023-12-13

我有一个 dll 无法导入到我的 vs2012 c# 项目中。我以前使用过 dllImport,但以前从未使用过 Marshal 或指针。我想我很幸运。

这是我目前拥有的代码。 被调用的函数是 fnLDA_GetDevInfo(DEVID *ActiveDevices) DEVID 是一个普通的无符号整数(#define DEVID unsigned integer)

//Allocate an array big enough to hold the device ids for the number of devices present.
//Call fnLDA_GetDevInfo(DEVID *ActiveDevices), which will fill in the array with the device ids for each connected attenuator
//The function returns an integer, which is the number of devices present on the machine.
[DllImport(DLLLOCATION,CallingConvention = CallingConvention.Cdecl)]
private static extern int fnLDA_GetDevInfo([MarshalAs(UnmanagedType.LPArray)] ref uint[] ActiveDevices);

我在代码中这样调用该函数

uint[] MyDevices;
fnLDA_GetDevInfo(ref MyDevices);

此时我得到一个错误:

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

现在我很确定会发生错误,因为我没有正确调用指针或其他东西。

任何帮助,将不胜感激。


你有一个额外的间接级别。数组被编组为指向数组的指针。当您将参数声明为ref,再次传递一个指针。因此你的 C# 代码匹配uint**。即使如此,你也不能使用ref使用数组类型,因为您不能期望非托管代码生成托管数组。

你的 p/invoke 应该是:

[DllImport(DLLLOCATION,CallingConvention = CallingConvention.Cdecl)]
private static extern int fnLDA_GetDevInfo([Out] uint[] ActiveDevices);

请注意,这个函数很难调用。由于函数没有传递数组的长度,因此如果数组不够长,函数就不可能避免超出数组末尾。我真的希望您有某种方法可以在调用此函数之前计算出数组需要有多大。

所以也许你应该这样称呼它:

uint[] MyDevices = new uint[SomeLargeNumberThatYouPresumablyCanProvide];
int len = fnLDA_GetDevInfo(MyDevices);

或者也许像这样:

int len = fnLDA_GetDevInfo(null);
uint[] MyDevices = new uint[len];
fnLDA_GetDevInfo(MyDevices);

我相信您将能够从 DLL 的文档和/或调用 DLL 的示例 C++ 程序中解决其余问题。

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

时间:2019-03-17 标签:c#dllimportwithpointers 的相关文章

  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • 从代码中,如何创建对存储在附加属性中的对象的属性的绑定?

    我们有一个继承的附加属性来存储一个对象 在可视化树的更下方 我们希望从代码绑定到该对象的属性 通常我们像这样构建绑定的路径部分 var someBinding new Binding Path new PropertyPath Attach
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐

  • 在 Swift 4 中,如果按下“Backspace”按钮且文本字段为空,如何移动到上一个 UITextField?

    我正在尝试解决这个问题 当我使用下面的代码时 我可以从一个文本字段移动到下一个文本字段 然后单击 退格 按钮 但仅当文本字段中有文本时才有效 我的问题 当文本字段为空时 如何单击 退格 按钮并移至上一个文本字段 第二个问题 如何去掉屏幕上闪
  • 通过 Android 访问 Google 帐户 ID/用户名

    如何在代码中访问用户的 Google 帐户 ID 用户名 我正在构建一个应用程序 它将调用 Web 服务来存储数据 并且我想识别提交数据的人的身份 我遇到了同样的问题 这两个链接为我解决了 第一个是这个 如何在 Android 手机上找回已
  • 字符串数组列表成一个逗号分隔的字符串

    尝试将字符串的 Arraylist 转换为一个大逗号分隔的字符串 但是当我使用 String joined TextUtils join participants 调试器显示参与者的大小为 4 但是连接值为 因此为空 private Arr
  • Symfony 1.4 邮件程序中的电子邮件正文?

    我正在使用 Symfony 1 4 邮件程序 在其中构建电子邮件所需的各个部分 然后使用以下命令将其发送出去 this gt getMailer gt composeAndSend sender recipient subject body
  • 在反应本机地图上需要未知模块“未定义”

    我想实现react native mapshere 但是当我导入上面的 MapView 时App js与代码import MapView from react native maps 我收到此错误 需要未知模块 未定义 如果您确定该模块存在
  • 子进程调用无效参数或选项未找到

    我试图在 Linux 上使用 subprocess call 调用 ffmpeg 命令 但我无法获得正确的参数 之前 我使用了 os system 并且它有效 但不推荐这种方法 使用带破折号的参数 例如 i 会出现此错误 Unrecogni
  • 如何使用 JHipster 注册表修复无效的 JWT [Docker]?

    我想用 JHipster 构建一个微服务软件 我正在 Docker 中运行 jhipster registry v3 2 4 我还有一个微服务应用程序 使用生成器 5 0 1 创建 但我没有生成网关应用程序 我在 docker compos
  • 在SQL / MySQL中,连接语句中的“ON”和“WHERE”有什么区别?

    以下语句给出相同的结果 一个是使用on 另一个使用where mysql gt select from gifts INNER JOIN sentGifts ON gifts giftID sentGifts giftID mysql gt
  • 具有抽象类的 JPA 实体继承 - ConstrainViolationException

    我正在尝试使用 JPA 注释和抽象类设置实体继承 我们的目标是让 DAO 通过其扩展与基础对象一起工作 以便我们可以通过使用不同的实体扩展 切入点和覆盖来对同一应用程序进行修改 而无需更改提供者和管理器 例子 基础应用程序堆栈有一个 DAO
  • 使用递归在Scheme中进行排列

    我发现了以下一段代码 它在Scheme中进行了排列 我的意思是 如果我输入类似的参数 1 2 3 它会给我 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 代码如下 define remove x lst cond
  • 使用 jQuery 和 JSONP 跨域检索 html

    我有一个表单 可以输出一行简单的 html a href link A LINK a 我可以直接使用附加到 url 的数据来访问该流程 例如http site com form asp sample 100 因为这是跨域 到子域 所以我尝试
  • C 中的精确宽度整数类型 (stdint.h)

    我希望 char short 和 int 类型的宽度为 1 2 和 4 个字节 我已经包括了stdint h标题进入我的来源 这是否保证 int8 t int16 t 和 int32 t 整数类型具有指定的宽度 实现这一目标的最佳方法是什么
  • Plon 4.3 默认编辑器未显示

    我有一个 Plone 4 3 站点 它是从 Plone 2 5 站点迁移而来的 它一直工作得很好 但由于某种原因 编辑任何页面或内容项时显示的默认编辑器是直接的 HTML 视图 我已经在 Firefox Chrome 和 Safari 中对
  • Excel VBA 搜索按钮

    我正在尝试使用文本框和命令按钮在整个工作簿中搜索特定单词或值 例如 3132 或 工作指令 到目前为止 我可以搜索我所在的工作表 但无法搜索工作簿的其余部分 另外 一些工作表是隐藏的 对此的任何见解都会有益并帮助我很多 我在下面列出了我当前
  • 颤振错误:java.lang.NoSuchFieldError PREFER_HIGHEST_OR_REMOTE_VERSION_NO_FORCE_STAGING

    我试图解决这个问题 但它总是给我同样的错误 我使用以下 Firebase 服务 Firebase 身份验证 Firebase 数据库 Firebase 存储 Firebase 消息传递 我希望能解决这个问题 感谢您的帮助 谢谢 截屏 Her
  • 如何从分类变量创建交互设计矩阵?

    我主要从事 R 统计建模 机器学习工作 并希望提高我的 Python 技能 我想知道在 python 中创建分类交互 任意程度 的设计矩阵的最佳方法 一个玩具示例 import pandas as pd from urllib import
  • DDD 中的有界上下文与 CQRS。共享聚合/实体。可能的?

    我找到了这个代码示例 https code google com p ddd cqrs sample 看起来非常完整且组织良好 不是一个 框架 只是一个示例项目 具有非常精细和明确的做事方式 但是 不完整 这带来了一些疑问 他们很擅长回答你
  • 使用 numpy 加权百分位数

    有没有办法使用 numpy percentile 函数来计算加权百分位数 或者有人知道计算加权百分位数的替代 python 函数吗 thanks 完全矢量化的 numpy 解决方案 这是我使用的代码 这不是一个最佳的 我无法用numpy 但
  • 从 C# 控制相机设备

    我现在面临一个问题 要将实时图像从相机 例如索尼 佳能 获取到winform 并从表单中的按钮控制相机捕获按钮 有没有人构建过这样的东西 或者有没有类似的项目是用 C 完成的 这几乎取决于相机及其驱动程序的功能 您最大的机会可能是 Wind
  • 时间:2019-03-17 标签:c#dllimportwithpointers

    我有一个 dll 无法导入到我的 vs2012 c 项目中 我以前使用过 dllImport 但以前从未使用过 Marshal 或指针 我想我很幸运 这是我目前拥有的代码 被调用的函数是 fnLDA GetDevInfo DEVID Act