首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • PHP的FFI拓展使用笔记

    从 编 译 C 动 态 库 到 php 的 FFI 拓 展 使 用要求版本FFI *没有安装 FFI 拓展,自行安装编写C代码新建 demo.c 文件// 包含c的stdio库(根据实际情况添加文件头) "demo.so";// 创建 FFI 对象$ffi = FFI::cdef($header_file, $library_file);// 调用函数cAdd$add = $ffi->cAdd(1, 2 php...忽略// 直接创建 C 的结构体,$demo_t得到是一个php对象类型// $ffi->new可以创建C的任意数据类型$demo_t = $ffi->new('struct demo_t' ($callback);linux 编译安装 FFI 拓展当然这个是确保已经安装了 php 环境下从官方下载PHP源码,解压,进入ext/ffi 目录apt install build-essential php -m | grep FFI# 出现 FFI 表示安装成功FFI实战项目php-webui-composer 绑定 webui 库实现跨平台桌面开发php-windows-robot php桌面自动化

    37820编辑于 2024-08-28
  • 来自专栏Rust语言学习交流

    Rust FFI 编程 - FFI 概述

    FFI 的历史和现状 FFI 这个术语最早来自 Common Lisp 的规范[1]。目前几乎所有严肃编程的语言都有提供 FFI 的支持,但大多数是单向功能。 严格来说,FFI 与 绑定,意义并不相同,绑定可以理解为 FFI 中的一种实现。 不同语言实现 FFI 的方式不尽相同。 所以,虽然都能做 FFI,但是不同语言实现 FFI 的困难程度是不同的。 哪些语言可以方便地对外提供 FFI 库支持 可惜,大部分语言只能单向地“索取”。 //en.wikipedia.org/wiki/Foreign_function_interface#cite_note-1 [2]: https://zh.wikipedia.org/wiki/%E8% B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A [3]: https://zh.wikipedia.org/wiki/X86%E8%B0%83%E7%94%A8%E7%BA%A6%E5%

    1.3K20发布于 2020-04-14
  • 来自专栏Rust语言学习交流

    Rust FFI 编程 - Rust 语言层面对 FFI 的支持

    Rust 语言对 FFI 有比较完善的支持。本节主要讲在基础设施层面,Rust 语言对 FFI 的支持。 在支持 C-ABI 的语言(如:Python)中传递 UTF-8 字符串[4]时,CString和CStr很有用。 所以CStr表示一个以终止符\n结尾的字节数组的引用,如果它是有效的 UTF-8 字符串,则可以将其转换为 Rust 语言中的&str。实现从 C 语言到 Rust 语言的字符串传递。 OsStr表示传递给操作系统的字符串引用,可以按照与OsString类似的方式将其转换为 UTF-8 编码的 Rust 字符串切片。 模块,https://doc.rust-lang.org/std/ffi/index.html [4] Rust 中 String 与 UTF-8 编码,https://mp.weixin.qq.com

    3.6K10发布于 2020-04-20
  • 来自专栏祝威廉

    Rust FFI 实践

    这里就会涉及到Rust FFI的使用,目前网络上资源也比较少,更多的是Example性质的,大家的文章大同小异,所以我这里就简单写下我这两天折腾的心得。代码还比较烂,欢迎大家指正,但勿喷。 在FFI里,我们可以使用一个空的struct 对象来代替一个实际的Rust对象,然后通过指针来进行应用。什么意思的呢? 我们以字符串为例子,因为对于字符串,不同语言的表示形态也是不一样的,但是都可以用char(u8)来表示,所以我们可以把字符串看成u8的数组。 #[repr(C)] pub struct cstring_t { data: *const u8, data_length: c_int, } imp #[no_mangle] pub , std::str::from_utf8(s)) } 现在,提供一个C的函数签名: void *pass_str(cstring_t *csr); 现在就可以在C侧调用了: char *ye

    1.3K20发布于 2019-05-06
  • 来自专栏伪架构师

    Knative 入门系列8拓展与展望

    本书中文版由 ServiceMesher 社区自发翻译系列文章,这是该系列的第8章,至此全书翻译完毕,我们将后续为大家提供PDF。 此代码可能类似于我们在示例 8-1 中看到的内容。 又如例 8-2,它也是使用 Node.js 编写的一个函数,它不是一个完整的 Express 应用程序,而仅仅由一个函数组成,不包含任何其他 Node.js 模块。 例 8-2 中的代码使用了function invokers特别支持的编程模型,function invokers 是riff 项目一部分的。 拓展阅读 在继续学习的过程中,有大量围绕 Knative 构建相关的文档、示例以及演示可以供您阅读和参考。

    1.2K20发布于 2019-07-23
  • 来自专栏Rust语言学习交流

    allwefantasy:Rust FFI 实践

    这里就会涉及到Rust FFI的使用,目前网络上资源也比较少,更多的是Example性质的,大家的文章大同小异,所以我这里就简单写下我这两天折腾的心得。代码还比较烂,欢迎大家指正,但勿喷。 在FFI里,我们可以使用一个空的struct 对象来代替一个实际的Rust对象,然后通过指针来进行应用。什么意思的呢? 我们以字符串为例子,因为对于字符串,不同语言的表示形态也是不一样的,但是都可以用char(u8)来表示,所以我们可以把字符串看成u8的数组。 #[repr(C)] pub struct cstring_t { data: *const u8, data_length: c_int, } imp #[no_mangle] pub , std::str::from_utf8(s)) } 现在,提供一个C的函数签名: void *pass_str(cstring_t *csr); 现在就可以在C侧调用了: char *ye

    92640发布于 2019-07-09
  • 来自专栏半行代码

    Flutter ffi实践录

    实践了一下 Flutter 通过 ffi 包调用 native C/C++ 代码,ffi 代表 Foreign function interface (外部函数接口),入门实践 可以在 Flutter 我们进 ffi 的源码可以看到: 原来 ffi 里面定义了 NativeType 来表示 C/C++ native 层的类型。看一下它的继承结构: 这里提供的全部都是基础类型。 封装一个 Utf8 来表示 String : class Utf8 extends Struct { } 把Dart的字符串转成指针: static Pointer<Utf8> toUtf8(String toUtf8(log), time, Utf8.toUtf8(threadName), threadId, isMainThread? 相比于 Android有封装好的 JNI, ffi 相对来说还是比较麻烦的。需要自己提供内存分配和类型转换的实现。 总结 到这里 ffi 的实践就介绍完了。

    2.4K20编辑于 2022-05-10
  • 来自专栏各类技术文章~

    Dart FFI使用 示例

    是什么 Dart FFI(官方地址)是可以在Dart Native平台上运行的Dart移动、命令行和服务器应用上通过Dart FFI来调用C代码的一个技术。 在pubspec.yaml文件中的dependencies中加入ffi、path库 pubspec.yaml name: ffi_sample version: 0.0.1 description: ffi: ^1.1.2 复制代码 3. 写Dart通信代码 在bin/main.dart中调用C import 'dart:ffi'; import 'package:ffi/ffi.dart'; import 'dart:io' show 后面我会继续更新,详细介绍Dart FFI使用,欢迎关注。

    2.5K40编辑于 2021-12-31
  • 来自专栏AIoT技术交流、分享

    详解FreeRTOS:系统内核控制函数(拓展篇—8

    FreeRTOS 中系统内核控制函数只供系统内核使用,用户应用程序一般不允许使用,本篇博文讲解这些函数仅供大家了解和参考。

    14800编辑于 2024-05-26
  • 来自专栏Rust语言学习交流

    Rust FFI 编程 - libc crate

    libc 是什么 libc 是对各平台的系统库的原始 FFI 绑定。其代码地址在:https://github.com/rust-lang/libc。可以看到,这是 Rust 官方维护的一个库。

    3.3K21发布于 2020-04-26
  • 来自专栏Rust语言学习交流

    Rust FFI 编程 - Bindgen 工具介绍

    前面我们经历了《Rust FFI 编程 - 基础知识》、《Rust FFI 编程 - 手动绑定 C 库》和《Rust FFI 编程 - Rust 导出共享库》三个大的子系列,Rust FFI 编程的基础部分算靠以段落 为其它动态语言写调用库:Python, Php, Nodejs, Ruby, Go, Java,Objective-C;、 附录:Rust 二进制瘦身等; 另外,会单独开若干大的后续系列,不会放在本 FFI

    3.6K20发布于 2020-09-15
  • 来自专栏Rust语言学习交流

    Rust FFI 编程 - nix crate

    size_t) -> c_int; // nix api (returns a nix::Result<CStr>) pub fn gethostname<'a>(buffer: &'a mut [u8] loop {} } } } 以上代码示例地址:https://github.com/lesterli/rust-practice/tree/master/ffi

    2K20发布于 2020-05-14
  • 来自专栏开源技术小栈

    PHP如何编译启用 FFI 扩展

    FFI PHP Foreign Function Interface (FFI) 是 PHP 7.4 引入的一个新特性,它允许 PHP 代码调用 C 语言的库函数,而无需编写额外的扩展。 现在,使用 FFI,你可以直接调用这些库,而无需编写和维护扩展。 两种启用方式 编译安装PHP的时候开启FFI扩展--with-ffi 已经安装PHP,通过扩展来编译安装FFI扩展 编译开启FFI . CREDITS ffi_arginfo.h ffi.c ffi.g ffi_parser.c ffi.stub.php php_ffi.h tests 生成 . operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) ffi.enable=true 检查是否安装成功 /usr/local/php-8.3.1/bin/php -m | grep FFI FFI 基础使用 <?

    72410编辑于 2024-08-27
  • 来自专栏前端自习课

    拓展】分享 8 个做处理本地存储的 JS 库

    来源:https://medium.com/javascript-in-plain-english 作者:Amy J. Andrews

    2.5K10发布于 2020-11-04
  • 来自专栏Rust语言学习交流

    从 RUST 库中公开 FFI

    在这篇文章中,我将讲述我对 Rust 和 FFI 的经验,基于 battery-ffi ,它将 FFI 暴露给我的另一个 crate — battery。 在大多数情况下,你不如要将诸如 u8 or i32 封装到 Box,除非你想在堆上分配他们,按原样返回它们是完全可以的。 由于 C 字符串基本上是指向以 nul 字节结尾的堆内存块的指针 (在 char* 类型的情况下),我们需要在堆上分配一些内存,并将 UTF-8 字符串6 放在那里。 return; } CString::from_raw(ptr); } 相反的情况下,当你需要从 C 接收字符串,记住这一点是至关重要的,C 字符串不仅可以是 UTF-8 pointer of course C strings can be in any desired encoding, but usually it is assumed to be an UTF-8,

    2.2K30发布于 2019-07-09
  • 来自专栏Rust语言学习交流

    在 WSL 中学习 Rust ffi

    顺带一提的是,博主通过 VS Code 使用 WSL,因为 Win 10 已经配置成 UTF-8 编码,所以并没有出现乱码问题 Rustup 国内镜像有哪些? interop_sort(arr, arr.len() as u32); } } fn main() { let mut my_arr: [i32; 10] = [10, 42, -9, 12, 8, /codes/ffi_learning) warning: `extern` block uses type `[i32]`, which is not FFI-safe --> src/main.rs ` Before sorting... [10, 42, -9, 12, 8, 25, 7, 13, 55, -1] After sorting... [55, 42, 25, 13, 12, 10, 8, 7, -1, -9] 我们看到,该函数提示我们 C 中并没有等价于 Rust slice 的类型,原因在于如果我们传递 slice,那么在 C/C++ 中就很容易访问超过数组长度的内存,造成内存不安全问题

    1.4K21发布于 2020-05-14
  • 来自专栏Rust语言学习交流

    Rust FFI 编程 - bindgen 使用示例

    当我们拥有一组具有良好声明的头文件时,自己定义 C 库的 Rust FFI 绑定函数是毫无意义的。我们可以使用 bindgen 这种工具从 C 库的头文件生成 Rust FFI 绑定函数。 ,针对 C 实现的secp256k1库生成 Rust FFI 绑定。 生成绑定 现在直接运行cargo build,将立即生成与secp256k1的 Rust FFI 绑定。 中有如下内容: #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct secp256k1_context_struct { _unused: [u8; let mut pubkey: secp256k1_pubkey = secp256k1_pubkey { data: [0; 64], }; let prikey: u8

    2.4K100发布于 2020-09-30
  • 来自专栏快乐阿超

    拓展函数

    对于聪明人来说,劝告是多余的;对于愚昧人来说,劝告是不够的——莫里哀 中文文档 拓展函数的定义: fun String.delBlank() = this.filter { !

    32640编辑于 2022-09-29
  • 来自专栏摸鱼网工

    拓展VLAN

    do show vtp status #查看VTP服务状态 show vlan #查看Vlan是否同步更新 配置拓展VLAN 需将VTP的模式设置为透明模式transparent 才可使用拓展vlan

    1.3K20编辑于 2022-10-04
  • 来自专栏快乐阿超

    stream拓展

    源码地址:https://gitee.com/VampireAchao/stream-query/blob/master/stream-core/src/main/java/io/github/vampireachao/stream/core/stream/Steam.java

    1.4K20编辑于 2022-08-21
领券