问题标签 [calling-convention]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何将指向成员函数的指针传递给 C 函数?
可能重复:
使用 C++ 类成员函数作为 C 回调函数
我正在使用 C 库(winpcap)编写一个面向对象的库。我需要将网络数据包到达时调用的回调函数作为函数指针传递。我想将成员函数指针传递给 winpcap,以保持我的设计面向对象并允许不同的对象接收不同的数据包。然而,据我所知,成员函数具有不同的调用约定,因此不能传递给 C 函数。有没有办法解决这个问题。我对 boost::bind 的实验(除了反复试验,我几乎没有使用过)没有成果。
有没有办法改变成员函数的调用约定?
这是我现在使用的回调函数的定义以及将它实际传递给winpcap
pcap_loop 只取函数的名称(目前在全局范围内)。这是函数指针参数(pcap_loop的第三个参数)的定义。由于这是第三方代码,我无法真正改变它。我必须有一个可以采用这种形式的成员函数:
据我了解,成员函数将使用 thiscall 并且 c 函数指针需要一个 cdecl
assembly - 什么是功能结语和序言?
在阅读某些 CPU 架构中的一些调用约定时,我读到了类似的内容
“结语和序言”,当从另一个函数调用一个函数时。
什么是功能序言或结语?
linux - WinCE 和 Linux 上的 ARM 调用约定?
WinCE 和 Linux 在 ARM 上使用相同的调用约定吗?有什么区别?
到目前为止,我找到的文件并没有很好地解释。例如,在http://msdn.microsoft.com/en-us/library/ms864497.aspx上,一行显示“Windows CE .NET 编译器”,下一行显示“ARM 编译器”,以及“CLARM” "在底部,不清楚是指同一个编译器还是不同的编译器。这是我到目前为止发现的...
- ARM 调用序列规范(WinCE) - 编写不佳的文档
- ARM 到 C 调用约定(Linux) - 非正式解释
- Wikipedia - 没有指定操作系统,也没有说明如何处理结构、浮点数或 64 位数字,也没有说明额外参数的放置位置,以防它们不适合寄存器。
- 更新:ARM 体系结构的过程调用标准- 最后我找到了一份综合文档,但它没有说明哪些操作系统遵循该标准(或者这些操作系统可能施加的变体或附加限制)。
我问的原因是我想尝试在 WinCE 中使用 LLVM 在运行时生成一些简单的代码,但它只正式支持 Linux。
php - 仅包含一次 PHP 类文件
我在我的代码中使用 PHP 类中的方法,我不想在我使用该类的每个文件中执行“require_once”。有没有办法将类包含在一个文件中,然后从代码中的任何地方访问它?
谢谢!
solaris - 什么是 OpenSolaris 系统调用调用约定 (x86)?
什么是 OpenSolaris 系统调用调用约定 (x86)?
我想用 32 位程序集编写一个程序,向控制台显示一个字符串。为此,我想使用“写”系统调用(第 4 号)。写的 C 定义是:
哪些寄存器应该保存fildes、buf和nbyte参数?我应该调用哪个中断?
visual-c++ - 何时使用调用约定
使用不同调用约定的关键因素是什么?什么时候有人知道在不同的场合使用特定的调用约定,例如__cdecl
or__stdcall
或 or 。__fastcall
例子真的很受欢迎。
assembly - 为什么有这么多不同的调用约定?
从历史上看,为什么似乎每个人和他们的小弟都定义了自己的调用约定?你有 C、C++、Windows、Pascal、Fortran、Fastcall 以及可能还有无数其他我没想到会提到的东西。对于绝大多数用例来说,一种约定不应该是最有效的吗?有什么好的理由更喜欢其中一个吗?
calling-convention - 将调用约定从 cdecl 更改为 stdcall
在 VS2005 中,我使用 _cdecl 调用约定并且项目构建时没有任何链接器错误。在将项目移植到 VS2008 时将调用约定更改为 _stdcall 后,出现以下错误:
错误 LNK2001:无法解析的外部符号 __imp__GCBOpen@8。
Configuration Settings>C\C++>Genral>Common Language Runtime support 设置为 No Common Language Runtime support
我需要有关为解决问题而需要完成的任何项目设置或代码更改的帮助。任何帮助表示赞赏。
gcc - 对 ABI 调用约定和拱门感到困惑
我对所有这些术语感到困惑:
ABI、调用约定和硬件架构。
ABI 与架构链接:x86-64 与 i386 具有不同的 ABI。但是你也可以定义自己的调用约定 cdecl ...
那么所有这些概念之间的联系是什么?哪个定义了另一个?
大多数情况下,我认为我对 ABI 感到困惑。你在调用约定的一部分里面放了什么?
谢谢
windows - 为什么微软选择 stdcall 作为他们的 API 约定?
有充分的理由吗?
它们的内部函数(未导出)是否也是标准调用约定?