长期以来,我不太了解混合不同的编程语言。根据this Wikipedia article,可以通过以下几种方式来完成外部函数接口(interface)(或FFI):
我的问题:
第一种,第二种和第三种方式?看来
我,他们都是为了汇编代码
所谓的语言变成一些
具有目标文件和 header 的库
文件,然后由
通话语言。
实现FFI可以在
几种方法:
我想知道第一种方式
链接的来源与
维基百科的第一种方式?
第三种方式是什么
来源是什么意思?它对应于Wikipedia中的第四种方式吗?
填补两者之间空白的工作
两种语言正在逐渐
从被叫语言转变
调用语言。我曾是
想知道如何理解?对于Wikipedia中的四种方式,这种转变是否也正确?
等价的概念?他们怎么样
相关和不同?
禁用名称处理。
编译器(例如gcc),然后
加载,从
并卸载共享库
通过Matlab函数
loadlibrary(),calllib()和
unloadlibrary()。
例如C++,Python,Java,Common Lisp
感谢您的启迪!最好的祝福!
最佳答案
可能有一个具体的例子会有所帮助。让我们以宿主语言为Python, guest 语言为C。这意味着Python将调用C函数。
Py_Object *
的第一个参数编写C函数。例如(from here):static PyObject *
spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
}
是可从Python调用的C函数。为此,必须在编写库时考虑Python兼容性。
另一件事是,有很多选项(确实有重叠)可以用一种语言从另一种语言调用函数。有FFI(据我所知等效于语言绑定(bind))通常指的是同一进程(可以说是同一可执行文件的一部分)中多种语言之间的调用,并且存在进程间通信方式(本地和网络) 。诸如CORBA和Web服务(SOAP或REST)以及COM +和远程过程调用之类的东西通常属于第二类,不被视为FFI。实际上,他们大多没有规定在交流的任何一方都可以使用的任何特定语言。我会松散地将它们作为IPC(进程间通信)选项,尽管在基于网络的APi(如CORBA和SOAP)的情况下这是简化的。
进入您的 list ,我会提出以下意见:
extern "C"
声明在C++中调用C以禁用名称重整。 **** 后两个根本不是外来函数接口(interface),因为使用了该术语。 FFi与编程语言之间的交互有关,应该能够使一种语言的任何库(具有适当的限制)可供另一种语言使用。可以使用一种语言访问的特定库不是FFI制造的。