如何将指向成员函数的指针传递给 C 函数? [复制]

2023-11-22

可能的重复:
使用 C++ 类成员函数作为 C 回调函数

我正在使用 C 库(winpcap)编写一个面向对象的库。我需要传递网络数据包到达时调用的回调函数作为函数指针。我想将成员函数指针传递给 winpcap,以保持我的设计面向对象并允许不同的对象接收不同的数据包。然而,据我所知,成员函数有不同的调用约定,因此不能传递给 C 函数。有没有办法来解决这个问题。我对 boost::bind 的实验(除了反复试验之外我几乎无法使用它)没有取得成果。

有没有办法改变成员函数的调用约定?

这是我现在使用的回调函数的定义以及将其实际传递给 winpcap

void pcapCallback( byte* param, const struct pcap_pkthdr* header, const byte* pkt_data );

pcap_loop( adhandle, 0, pcapCallback, NULL );

pcap_loop 仅采用函数的名称(目前位于全局范围内)。这是函数指针参数的定义(第三个参数pcap_循环)。由于这是第三方代码,我无法真正更改它。我必须有一个可以采用这种形式的成员函数:

typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, const u_char *);

据我了解,成员函数将使用 thiscall 并且 c 函数指针需要 cdecl


你只能通过staticC API 的成员函数。

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

如何将指向成员函数的指针传递给 C 函数? [复制] 的相关文章

  • 这种双重实例是否有害,或者根本没有必要?

    在仔细阅读遗留资源时 我发现了这一点 DataSet myUPC new DataSet myUPC dbconn getDataSet dynSQL Resharper 正确地将其中的 new Dataset 部分 灰显 并建议 删除多余
  • 有没有办法将所有内容都包含在 dbcontext 中?

    当查询一个DbContext急切加载时 需要Include Navigation 为了填充导航属性 然而 在某些情况下 我想简单地Include all实体的导航属性 有没有办法做到这一点 或者有办法做到这一点 我假设你可以反思 但我宁愿避
  • TCP客户端;网络流;异步读取; C#

    请原谅我对任务和异步缺乏了解 使用 TcpClient 类 我正在创建与可用服务器的连接 void async RunClientAsync TcpClient client new TcpClient try await client C
  • 如何在 C# 中启动文件

    编辑 我觉得自己像个白痴 我有一种感觉 像下面的答案会起作用 但没有看到任何与下面的答案类似的谷歌结果 所以当我看到这段复杂的代码时 我想它一定是这样的 我搜索并找到了这个Windows 列出并启动与扩展关联的应用程序 https stac
  • 以概率从列表中选择随机元素

    我有一个包含四个项目 A B C D 的列表 每个项目都有被选择的概率 例如 A 有 74 的机会被选中 B 15 C 7 D 4 我想创建一个函数 根据其概率随机选择一个项目 有什么帮助吗 为您的项目定义一个类 如下所示 class It
  • 子进程中的变量修改

    我正在研究科比和奥哈拉伦的作品Computer Systems A Programmer s Perspective 练习 8 16 要求程序的输出如下 我更改了它 因为他们使用了一个你可以在他们的网站上下载的头文件 include
  • 如何通过C#在SQLite数据库中写入变量DateTime值?

    我很新C and SQLite数据库并有一些变量存储在 SQLite 数据库中TimeStamp 这是我的代码 DateTime now DateTime Now m dbConnection new SQLiteConnection Da
  • .NET Core 2 - 从启动中调用存储库方法[重复]

    这个问题在这里已经有答案了 我有以下存储库和类 public interface IValueService GetAll public class ValueService IValueService private DataContex
  • 泛型类上的 DebuggerDisplay

    我在应用时遇到问题DebuggerDisplay泛型类的属性 DebuggerDisplay foo class Foo DebuggerDisplay Bar t class Bar
  • 如何在C中递归地找到另一个字符串中的字符串位置?

    我们有一个任务来创建带有两个字符串参数的递归函数 原型应该是这样的 int instring char word char sentence 如果我们愿意调用函数 instring Word Another Word 它应该具有以下返回值
  • C++ fill() 与 uninitialized_fill()

    您好 我是初学者 我想知道容器的 fill 和 uninitialized fill 之间的区别 我在谷歌上进行了快速搜索 但没有得到很好的答案 有人可以帮助我吗 fill 将值 使用赋值运算符 分配给已构造的对象 uninitialize
  • 阻止用户取消选择列表框中的项目?

    我有一个列表框 里面有很多项目 用户可以单击某个项目来编辑其内容 如何防止用户取消选择所有项目 即 用户不应该无法选择任何内容 您的情况缺少一个案例 即清除列表后 您将选择列表中不再存在的项目 我通过添加额外的检查来解决这个问题 var l
  • 如何在 .NET 中自定义 JSON 枚举的反序列化?

    我有以下示例 C 代码 它是使用 svcutil exe 应用程序从 xsd 自动生成的 DataContract public enum Foo EnumMember Value bar Bar 1 EnumMember Value ba
  • C# 的 xml 序列化中是否有一个属性可以跳过空数组?

    C 的 xml 序列化中是否有一个属性可以跳过空数组 这将提高 xml 输出的可读性 好吧 你也许可以添加一个ShouldSerializeFoo method using System using System ComponentMode
  • 如何将此 Boost ASIO 示例应用到我的应用程序中

    我已经阅读了很多 ASIO 示例 但我仍然对如何在我的应用程序中使用它们感到困惑 基本上 我的服务器端需要接受超过100个连接 客户端 这部分是通过使用线程池 通常每个CPU核心2 4个线程 来完成的 为简单起见 我们假设只有一个连接 为了
  • 如何将这个基于代码的 WPF 工具提示转换为 Silverlight?

    以下工具提示代码适用于WPF 我正在努力让它发挥作用银光 但它给了我这些errors TextBlock does not contain a definition for ToolTip Cursors does not contain
  • Lambda 按值捕获和“mutable”关键字

    关键词的必要性mutable在 lambda 中 是造成极大混乱的根源 考虑代码 int x 10 function
  • int 类型的构造函数

    考虑到成本 这些情况是否相同 case 1 int a 5 case 2 int a 5 case 3 int a a 5 这三种语法是不同的 请耐心等待 我使用用户定义类型而不是 int 稍后我将回到 int T a 5 Direct i
  • 恐怖分子已弃用

    正在接听另一个问题 https stackoverflow com q 11830514 1468366 我偶然发现了man page http linux die net man 3 herror一个名为的函数herror 看起来很像pe
  • 使用 Powershell 或 C# 获取 Azure“文件和文件夹”作业状态

    我一直在尝试找到一种方法来获取在 AzureRM 中运行的几个客户上运行的 文件和文件夹 备份作业的状态 可以在 AzureRm 门户中手动找到状态 恢复服务保管库 gt 作业 gt 备份作业 使用powershell不显示任何作业信息 G

随机推荐

  • Chrome 打印预览不加载 @media 仅打印字体

    我想要一个与屏幕不同的打印字体 不幸的是 Google Chrome 打印预览 适用于其他浏览器 不会加载字体 也不会显示文本 但如果您第二次尝试 字体将被加载 然后 Google Chrome 打印预览将显示文本 这是一个可以重现问题的小
  • 从字符串中删除字符及其后的所有内容

    我知道要替换字符串的字符串 但只有当我确切知道要删除的内容时 这才有效 如果我有一个如下所示的字符串 嗨 那里 这是一个测试 功能 嗨 那里 如何删除 feature 及其后的所有内容 任何帮助将不胜感激 提前致谢 编辑 如果绝对需要使用
  • 从 NodeJS 中的 keycloak 会话获取用户名

    有没有类似的东西 request getUserPrincipal getName Java 在Node中我们使用时获取用户名连接钥匙斗篷使用快速中间件 我也遇到了这个问题 我确实深入研究了中间件代码并试图找到类似的东西 事实证明 requ
  • CSS 导入字体

    我需要在网站上使用 4 种字体 并且我的网站文件夹中有这些文件 Baskerville ttc BellGothicstd Black otf BellGothicstd Bold otf JennaSue ttf 我尝试使用 Import
  • 如何解析 shell 脚本中的符号链接

    给定绝对或相对路径 在类 Unix 系统中 我想在解析任何中间符号链接后确定目标的完整路径 同时解决 用户名符号的奖励积分 如果目标是一个目录 则可以 chdir 进入该目录 然后调用 getcwd 但我真的想从 shell 脚本中执行此操
  • 声纳违规:安全性 - 数组直接存储

    存在声纳违规 声纳违规 安全性 数组直接存储 public void setMyArray String myArray this myArray myArray 解决方案 public void setMyArray String new
  • 如何在 React Native 中抑制由于第三方 PropTypes 库而产生的警告

    在 React Native 中使用样式表时 我收到了大量警告 如下图所示 iOS 模拟器上的警告 怎么抑制呢 无法禁用特定组件的警告 但您可以在应用程序中禁用不同类型的警告 要禁用所有警告 请使用 console disableYello
  • 外部硬盘上的 MySQL 表

    我有大量文本数据需要导入MySQL 我在 MacBook 上执行此操作 但没有足够的空间 因此我想将其存储在外部硬盘驱动器中 目前我并不真正关心速度 这只是为了测试 最好的方法是什么 在外部硬盘上安装 MySQL 这在 Mac 上可行吗 在
  • 动态设置局部变量[重复]

    这个问题在这里已经有答案了 如何在Python中动态设置局部变量 变量名是动态的 与已发布的其他答案相反 您无法修改locals 直接并期望它能起作用 gt gt gt def foo lcl locals lcl xyz 42 print
  • UserPrincipal.FindByIdentity() 始终返回 null

    我正在使用 LdapAuthentication 将用户登录到 Active Directory 我想找到该用户所属的所有组 我正在使用以下代码 string adPath LDAP OU HR Controlled Users OU Al
  • 用 Perl 读取精美的文件

    我正在寻找在 Perl 中读取文件的有效方法 并发现了这一非常有趣的行 my text do local ARGV file lt gt 我的问题是 这到底是如何运作的 通常在读取您设置的文件时 undef 但我不明白这是如何做到的 事实证
  • 通过收集多列来整理数据集? [复制]

    这个问题在这里已经有答案了 我想通过这样操作数据来整理数据集 age gender education previous comp exp tutorial time qID 1 time taken 1 qID 2 time taken
  • 如何使用 Python 在 NLTK 中使用斯坦福解析器

    是否可以在 NLTK 中使用斯坦福解析器 我不是在谈论斯坦福 POS 请注意 此答案适用于 NLTK v 3 0 而不适用于更新的版本 当然 请在 Python 中尝试以下操作 import os from nltk parse impor
  • ffmpeg命令组合音频和图像

    我正在努力实现一些我之前认为应该是一项简单任务的事情 是否有一个 ffmpeg 命令可以执行以下操作 将 audio wav 文件转换为视频 将大约 100 张图片 img d png 添加到视频中 以便它们 自动 拉伸以填充视频的整个长度
  • 如何使用现有的 for 循环在 Liquid 模板中进行 n.times 循环

    在 ruby 中我可以做 n times do 是否可以在 Liquid 标记中做到这一点 我当前的循环是 对于 site posts 中的视频 我的目标是运行此循环 2 次 目前有 4 个对象将通过循环调用 但我想要 8 个 我希望这一点
  • 将 .NET 中的 DateTime 对象格式化为 Objective-C 的 NSDate

    我正在使用一个 API 它将 NET DateTime 对象返回到我的 iOS 应用程序中 我对发生的事情有点困惑 DateTime 在离开 API 时看起来很好 但是当它进入时 它会通过 JSON 并以字符串形式出现 如下所示 Date
  • 从 JavaScript 打开本机地图应用程序,而不依赖经度和纬度坐标

    我正在寻找一种从phonegap 包装的JavaScript 应用程序打开应用程序的本机地图应用程序的方法 到目前为止 我的研究表明 对于 Android 我必须使用以下格式的链接 a href Geolocation Test a 这是有
  • 在 vim 中将 :Wq 重新映射为 :wq

    很多时候 当我想在 vim 中保存文件并立即退出时 我不小心输入了 Wq 而不是 wq Vim 自然地给了我这个错误 E492 Not an editor command Wq 我想知道是否可以将 Wq 重新映射到 wq 您可以创建一个简单
  • 如何将 CSS 下拉菜单居中 [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我需要一些帮助 我有一个 CSS 下拉菜单 但我希望标题居中 这样在所有屏幕尺寸上它都会位于中间 因为目前它卡在左侧 http jsfiddle net y4vDC 任何帮助将不胜感激 下
  • 如何将指向成员函数的指针传递给 C 函数? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 C 类成员函数作为 C 回调函数 我正在使用 C 库 winpcap 编写一个面向对象的库 我需要传递网络数据包到达时调用的回调函数作为函数指针 我想将成员函数指针传递给 winpcap 以保持