2

我需要帮助说服第 3 方软件供应商更改他们的 API 以将一些用户数据传递给回调。

这似乎是一种标准做法,因为我经常在使用回调的地方看到它。我正在寻找一些弹药给他们的开发团队以说服他们这样做。

我的理由是我已经为他们的所有 API 调用创建了 1:1 Python 绑定(除了那些需要回调的调用)。如果他们的 API 也为用户数据占用了 void* ......例如:

SOME_API_register_function(char* name, char* desc, void* callback, void* user_data);

代替...

SOME_API_register_function(char* name, char* desc, void* callback);

这将使我更容易(甚至可能)为这些函数创建绑定。我的绑定目前在 Cython 中,它缺乏动态创建有效 C 回调的能力。我相信 cffi Python 库提供了这种能力,但是这些绑定在性能上有点慢,我担心他们正在做的那种魔术来实现它......我也不想移植我的绑定.

问题是,即使我们向该软件的客户付费,让他们甚至承认错误都需要很多时间,更不用说提供新功能了。我拥有的弹药越多越好。任何说明为用户数据提供 void* 的编程指南、最佳实践等文档都会有所帮助。

4

1 回答 1

0

user_data如果要多次注册相同的功能,则需要该字段。在这种情况下,不同的user_data人会区分它们。

这在几种情况下很有用:

  1. 注册与某个对象相关,并且可能有很多对象(例如打开的文件)。您不希望每个打开的文件都有一个单独的函数。

  2. 您想在几个注册函数中做基本相同的事情,并且可以用一些值(例如数字常量)来表示差异。在这种情况下,多次注册相同的函数并user_data包含不同的值是很有用的。

PSvoid *callback是一个不好的定义。类型应该定义回调的参数和返回类型(最好使用 a typedef)。

于 2013-10-20T21:41:40.560 回答