当前位置: 首页 > 知识库问答 >
问题:

SWIG typedef识别

岳劲
2023-03-14

我也在尝试在PHP中使用我的C类。在我的C代码中,我将typedef声明为:

typedef unsigned char byte;

所以我打算让SWIG在包装类中考虑我的typedef,我的接口文件如下:

%module xxx

typedef unsigned char byte;

%include "xxx.h"

....

%{

typedef unsigned char byte;

#include "xxx.h"

%}

在我的测试代码中,我将类型称为:

byte *data;

但我有以下错误:

Fatal error: Class 'unsigned_char' not found in xxx.php

附言:我的接口文件中也包含了“stdint.I”,但也出现了同样的错误

有什么想法吗?

共有1个答案

韩博厚
2023-03-14

我可以确认您展示的界面是可行的,并且适用于简单的情况,例如,我编写了以下头文件进行测试:

byte *make() { return NULL; }
void consume(byte *data) {}

并使用界面:

%module xxx

typedef unsigned char byte;

%include "xxx.h"

%{
typedef unsigned char byte;

#include "xxx.h"
%}

我能够用以下PHP编译和测试:

<?php
include("xxx.php");
$r = xxx::make();
xxx::consume($r);
?>

这一切都如期而至。

但需要注意的是:

>

  • 一般来说,我倾向于编写希望传递给模块的代码(即%{%}%包含
  • 之前的位)
  • 我倾向于使用一种标准的int类型,例如uint8_t
  • 你的问题并不清楚你打算如何使用byte*data——大概是一个数组,在这种情况下,你需要向界面添加更多的代码。(或者最好还是使用std::vector。)

    %module xxx
    
    %{
    typedef unsigned char byte;
    
    #include "xxx.h"
    %}
    
    %include <carrays.i>
    
    %array_class(byte,ByteArray);
    
    typedef unsigned char byte;
    
    %include "xxx.h"
    

    然后可以在PHP中用作:

    $a = new ByteArray(100);
    $a->setitem(0, 1);
    $a->setitem(1, 2); //...
    xxx::consume($a->cast());
    

    ByteArray是SWIG提供的一个实用类,用于保存和包装bytes的原始C数组。

  •  类似资料:
    • 更新时间:2019-07-19 10:48:36 节点简介 人脸识别/图像识别/OCR节点属于智能节点,区别在于封装的云市场api功能不同。人脸识别节点主要有人数检测、人脸身份证对比、性别年龄情绪识别等功能。图像识别节点主要有烟雾火焰火灾识别、动物识别、植物识别、植物花卉识别等功能。OCR节点主要有驾驶证识别、车牌识别、身份证识别等功能。 使用场景 如果您需要进行人数检测、人脸身份证对比、性别年龄

    • 借助ML Kit的地标识别API,您可以识别图像中的一些广为人知的地标。 当您将图片传递给此API时,您会看到其中已识别的地标,以及每个地标的地理坐标和发现地标的图像区域。您可以使用此信息自动生成图像元数据,根据用户共享的内容为用户创建个性化体验等等。 iOS Android 核心功能 识别著名的地标 获取自然或者已建地标的名称和地理坐标以及地标所在图像的区域。试用 Cloud Vision AP

    • 使用ML Kit的人脸识别API,您可以检测图像中的人脸并识别关键面部特征。 借助人脸识别功能,您可以获取所需的信息,以执行修饰自拍和美化人像等任务或从用户照片中生成头像。由于ML Kit可以执行实时的人脸识别,因此您可以将其用于视频聊天或会对玩家表情进行响应的游戏等应用程序。 iOS Android 核心功能 识别和定位面部特征 获取检测到的每个人脸的眼睛,耳朵,脸颊,鼻子和嘴巴的坐标。 识别面

    • 借助ML Kit的文本识别API,您可以识别任何拉丁语文本(以及更多的基于云端的文本识别)。 文本识别可以自动完成信用卡,收据和名片等繁琐数据输入,或帮助组织照片。借助基于云的API,您可以从文档中提取文本,您可以使用它来增加辅助功能或翻译文档。应用程序甚至可以实时追踪真实世界的对象,例如通过读取列车上的数字。 iOS Android 您可以在设备API或者云端API中选择 设备上 云端 价格 免

    • 由于连接到不同的API,我目前正在开发一个工具,允许我阅读所有的通知。 它工作得很好,但现在我想用一些声音命令来做一些动作。 就像当软件说“一封来自Bob的邮件”时,我想说“阅读”或“存档”。 我的软件是通过一个节点服务器运行的,目前我没有任何浏览器实现,但它可以是一个计划。 在NodeJS中,启用语音到文本的最佳方式是什么? 我在它上面看到了很多线程,但主要是使用浏览器,如果可能的话,我希望在一

    • 在中,它显示的“非静态方法'getcontext()'不能从静态上下文引用”如何解决,或者我应该调用什么来代替它。