C# 编组回调

2024-04-09

我正在尝试对结构中的 c 回调进行编组。我很确定我的一切都是正确的,但是当使用我的 C# 示例时,我没有收到事件,而当使用 C++ 时,我确实收到了事件。

这是 C#

class Program
{
    [DllImport("Some.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
    public static extern int SetCallbacks(Callbacks callBack);


    static Callbacks Callback = new Callbacks { DataArrived = DataArrived, SendFailure = SendFailure };
    static void Main(string[] args)
    {
        SetCallbacks(Callback);

        Console.ReadLine();
    }

    static void DataArrived(uint id, IntPtr data)
    {

    }

    static void SendFailure(uint id, uint id2, IntPtr data)
    {

    }
}



[StructLayout(LayoutKind.Sequential)]
public struct Callbacks
{
    public DataArrived DataArrived;
    public SendFailure SendFailure;
}

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void DataArrived(uint id,   IntPtr data);

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void SendFailure(uint id, uint id2, IntPtr ulpData);

这是来自 C 头文件。

struct callBacks
{
    void (*dataArriveNotif) (unsigned int,    void*);
    void (*sendFailureNotif) (unsigned int, unsigned int, void*);
}

int SetCallbacks(callBacks callBacks);

这是工作的c++。

struct callBacks;
callbacks.dataArriveNotif = &dataArriveNotif;
callbacks.sendFailureNotif = &sendFailureNotif;
SetCallbacks(callBacks);

与代表有关的一切实际上都是正确的。我在示例中稍微简化了场景。

public static extern int SetCallbacks(Callbacks callBack); 

实际上是

public static extern int SetCallbacks(String[] array, Callbacks callBack);

字符串数组末尾有很多尾随 0。这使得回调结构全部为空。我放弃了尝试以正确的方式封送 string[] ,只是将其设为 Intptr ,一切都开始工作了。

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

C# 编组回调 的相关文章

  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • C# - Visual Studio 中的 System.OutOfMemoryException

    我遇到问题 当我右键单击 Visual Studio 中的主窗体并转到 视图设计器 时 出现错误 它说 引发了 System OutOfMemoryException 类型的异常 堆栈跟踪 at System Reflection Asse
  • C++0x 初始值设定项列表示例

    我想看看这个现有代码示例如何利用 C 0x 初始化列表功能 示例0 include
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • 使用 GCHandle 将大型结构数组从 C# unity 脚本传递到 C++ dll 在 C++ 函数执行后崩溃

    我想从 C unity 脚本将结构数组传递给 c 本机插件 我做了如下操作 我可以访问数据 但我的应用程序在执行 c 函数后崩溃 我不知道为什么 C side StructLayout LayoutKind Sequential publi
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 使用 catch all 字典属性将 json 序列化为对象

    我想使用 JSON net 反序列化为对象 但将未映射的属性放入字典属性中 是否可以 例如给定 json one 1 two 2 three 3 和 C 类 public class Mapped public int One get se
  • 文件加密与解密问题

    我一直在尝试在 VC Express 2010 中加密和解密文件 我见过的所有教程和文档都需要两个FileStreams 来加密文件 一个用于读取未加密的版本 另一个用于加密 当我实际编写代码时 它不断抛出错误 告诉我它无法打开该文件 因为
  • 删除数组时出现访问冲突异常

    删除分配的内存时 出现 访问冲突读取位置 异常 如下所示 我有一个针对 Visual Studio 2010 工具集 v100 C 编译器编译的本机 dll 我有一个针对它的托管 dll 包装器 它是针对工具集 v90 编译的 因为我想以
  • 文本框中“结束编辑”的事件

    我正在 winform c 中使用文本框 并使用文本在数据库中进行查询 但每次文本更改时 我都需要不断查阅文本框的文本 因此 对于这些 我使用 KeyUp 但这个活动太慢了 文本框编辑完成后是否会触发任何事件 我考虑完成2个条件 控制失去焦
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 动态菜单创建IoC

    我想知道是否有人知道我如何创建如何使用 AutoFac 之类的东西来让我动态地允许 dll 创建自己的表单和菜单项以在运行时调用它们 所以如果我有一个 员工 dll 新入门表格 证书表格 供应商 dll 供应商详细信息来自 产品形态 在我的
  • 使用 WinAPI 连接禁用的显示设备

    我的问题是启用禁用的监视器ChangeDisplaySettingsEx 我想这不是火箭科学 但经过一番挖掘后 它看起来仍然是不可能的 我找到了一种根据找到的 Microsoft 代码示例禁用所有辅助显示器的方法here https msd
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收

随机推荐

  • 带有闪亮下载数据按钮的自定义 html

    我想知道如何使闪亮downloadHandler使用自定义 html UI In my index html我有以下内容 a class shiny download link shiny bound output export a 并且在
  • 当 AudioSessionActive 为 NO 时,无法通过硬件按钮控制 AVAudioPlayer 的音量

    我正在构建一个路线导航应用程序 可以播放周期性的简短声音片段 无论屏幕是否锁定 声音都应该播放 应该与其他音乐播放混合 并且应该在播放此音频时使其他音乐闪避 Apple 在 29 20 分钟的 WWDC 2010 session 412 i
  • WPF ComboBox DropDown 部分出现在错误的位置

    我在 XAML 窗口上放置了几个 ComboBox 当我展开其中任何一个时 下拉部分会出现在屏幕的左上角 我使用 Visual Studio 2008 C Express 我不记得当我使用Visual Studio 2008 试用版 时有这
  • 如何对密码进行哈希处理

    我想在手机上存储密码的哈希值 但我不知道该怎么做 我似乎只能找到加密方法 应该如何正确地对密码进行哈希处理 考虑到今天 2012 年 的最佳实践 这里的大多数其他答案都有些过时了 NET 中原生可用的最强大的密码哈希算法是 PBKDF2 由
  • 带空间的自动完成文本视图

    我有一个 Room 数据库并创建了一个模型和 viewModel 我想知道如何使自动完成文本视图与数据库数据和视图模型一起工作 以在用户输入时过滤客户列表 视图模型 class CustomerVM ViewModel private va
  • R Notebook HTML 格式 - 添加到分页表的超链接

    我希望从 R Notebook 编写一个 html 文件 其中包含带有超链接的分页表 可以使用插入超链接knitr kable 但我找不到生成的方法paged 由于我的问题似乎没有完美的解决方案 我想我应该发布我想出的解决方法 以防有人遇到
  • 代理服务器截断视图状态

    有什么方法可以模拟代理服务器截断视图状态吗 我通过将 ViewState 放在服务器端来完全避免使用 ViewState 客户端 该代码大约有 5 行长 我已经看到性能的巨大改进 http aspadvice com blogs rober
  • IE8 不显示图像(红色 x)...有时

    我对以下问题感到抓狂 这在任何其他浏览器 Chrome Firefox 上都不会发生 IE8缓存被清除 浏览器启动时会打开 HTML Javascript 页面 该页面会动态请求并创建一些图像 此 HTML 页面由 Tomcat 服务器 l
  • 下载管理器在 Android Pie 9.0 NetworkSecurityConfig 中不起作用:未指定网络安全配置,使用平台默认值

    将设备操作系统更新为Android 9 0 以前这段代码工作正常 小米A2 现在 文件没有被下载Android Pie 9 0 此外 它在奥利奥 牛轧糖 棉花糖中运行良好 这是代码片段 File myDir new File Environ
  • 使用 awk 将稀疏矩阵转换为 ARFF

    我正在处理稀疏矩阵格式的极大数据集 数据具有归档格式 3 个制表符分隔的列 其中第一列中的字符串对应于行 第二列中的字符串对应于属性 第三列中的值是加权分数 church place 3 church institution 6 man p
  • 为什么没有显示 Google Analytics(分析)内容实验的结果?

    首先 让我快速为您介绍一下我的设置 我们有多个域 因此我使用跟踪代码 将流量同时发送到 2 个不同的配置文件 一个配置文件跟踪该特定域 另一个是多域配置文件 它从以下位置收集数据 all域 这就是我的域上的页面的跟踪代码的样子 UA XXX
  • MySQL列中的随机数[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在尝试在名为 likes 的数据库列之一中添加随机数 其中大约有 5000 行 目前我已经尝试像下面这样获得从 10
  • 我可以使用 PDO 参数化语句创建 MYSQL 表吗?

    我希望使用 PHP 和 PDO 创建一个 MySQL 表 我还希望参数化表名 我已经尝试实现这一点 并且有错误的代码如下所示 class databaseaccess public hostname localhost public use
  • 如何在C#中获得一组枚举值?

    假设我有一个枚举 http msdn microsoft com en us library system windows forms dialogresult aspx namespace System Windows Forms pub
  • 从 Firebase 检索的自定义对象始终具有 Null 属性

    我正在尝试检索自定义User来自 Firebase 的对象如下 getUserFromDB loggedInUserEmail viewModel new ViewModelProvider this get UserViewModel c
  • 无法将 SelectedIndex 设置为 0

    当尝试将 ComboBox SelectedIndex 设置为 0 以便我将第一个值作为默认值时 不起作用 组合框默认为空 如果我尝试将其设置为任何其他有效的数字 我会将所选索引作为默认值 有人知道为什么我不能从 xaml 将其设置为 0
  • 从 Ansible 中的自定义模块访问 playbook 变量[重复]

    这个问题在这里已经有答案了 我正在 Ansible 中编写一个特定于 Playbook 的自定义模块 是否可以直接访问剧本变量 而不需要将其作为参数传递给任务 这是不可能的 因为模块是远程执行的 除非显式传递 否则所有变量都不可用 我有同样
  • 从 X 和 Y 坐标获取纬度和经度

    看起来从经度和纬度到X和Y坐标的转换有丰富的知识 但反过来却没有 这是我根据 Kavrayskiy 的数学计算得出的函数 float xp kavraX radians pv x radians pv y FACTOR float yp k
  • 用字典重新映射 pandas 列中的值,保留 NaN

    我有一本字典 如下所示 di 1 A 2 B 我想将其应用到col1数据框的列类似于 col1 col2 0 w a 1 1 2 2 2 NaN to get col1 col2 0 w a 1 A 2 2 B NaN 我怎样才能最好地做到
  • C# 编组回调

    我正在尝试对结构中的 c 回调进行编组 我很确定我的一切都是正确的 但是当使用我的 C 示例时 我没有收到事件 而当使用 C 时 我确实收到了事件 这是 C class Program DllImport Some dll CharSet