C 中的 FTDI D2XX API 在命令行控制台上工作,但在由 Xcode 和 Swift 编程在 macOS 上构建的应用程序中始终返回零

Posted

技术标签:

【中文标题】C 中的 FTDI D2XX API 在命令行控制台上工作,但在由 Xcode 和 Swift 编程在 macOS 上构建的应用程序中始终返回零【英文标题】:FTDI D2XX API in C works on command-line console but always returns zero in application which is built by Xcode and Swift programming on macOS 【发布时间】:2019-10-24 10:03:22 【问题描述】:

我正在尝试在 masOS 上构建一个 macOS 应用程序以与 FTDI D2XX 设备进行通信。 我使用 gcc 用 C 代码编译了一个简单的控制台应用程序,它运行良好并获得了预期的设备数量。 但是当我尝试将 FTDI 导入 Xcode 并使用 Swift 5 构建应用程序时。该应用程序可以成功构建和执行,但对于 FTDI 设备计数,它始终返回 0。 我尝试使用两种方法将 FTDI D2XX 静态库 (ftd2xx.a) 导入 Xcode。但两者的结果相同。

    为调用 FTDI D2XX API 创建了 C 包装器和桥接头 创建模块并使用“import xxx”

调用 FTDI D2XX API 的 C 代码是:

int queryDeviceCount(void)

     FT_STATUS         ftStatus;
     DWORD             numDevs = 999;

     ftStatus = FT_CreateDeviceInfoList(&numDevs);
     if (ftStatus == FT_OK) 
           return numDevs;
     

     return 0;

调用 FT_CreateDeviceInfoList 时,它在 ftStatus 中返回 FT_OK。但是 numDevs 始终为零(在我的设置中应该为 2)。 我认为 FTDI D2XX 驱动程序在我的 MacBookPro 中应该没问题,因为它在命令行控制台中运行良好。 所以,我想知道在命令行控制台和 GUI 应用程序之间调用 FTDI API 有什么区别。我很确定在 GUI 应用程序中正确调用了 FTDI API。

谢谢!

【问题讨论】:

【参考方案1】:

我在 macOS GUI App 中发现,系统资源是受保护的。我需要在“App Sandbox”中启用 USB 访问功能才能使用 USB 访问 API。 App Sandbox 出现在 Xcode 的 Signing & Capabilities 窗格中,显示用于配置功能的其他控件。

【讨论】:

以上是关于C 中的 FTDI D2XX API 在命令行控制台上工作,但在由 Xcode 和 Swift 编程在 macOS 上构建的应用程序中始终返回零的主要内容,如果未能解决你的问题,请参考以下文章

命令行参数是啥?

我可以从外部 javascript 访问控制台命令行 API(例如来自 Firebug 或 Chrome Inspector 控制台的 $$ 和 traceAll)吗?

用C语言写的API运行的时候总是先弹出一个命令行窗口,如何让他不弹出来?

使用 FTDI Basic 回读 ATmega328p 程序

在 Linux 上用 C 语言读写串口

Visual Studio单元测试和命令行参数,以避免源代码管理中的密码