在Go源代码中,我有以下内容:
type T struct {
// some data
}
func (t *T)M(arg0 SomeType1) {
// some computations
}
var Obj *T
我有一些与C语言相关的源代码
// SomeType1C is equivalent to SomeType1.
typedef void (*CallbackFunc)(SomeType1C);
// callback will be called !after! register_callback function returns.
void register_callback(CallbackFunc callback);
我想在C语言中将Obj.M
作为register_callback
的callback
使用。
在使用winapi的MS Windows上,我会传递类似于C.CallbackFunc(unsafe.Pointer(syscall.NewCallback(Obj.M)))
这样的东西给register_callback
(不确定是否完全正确,但至少能够工作)。但是在非Windows系统中没有NewCallback
。
PS:
我确认在初始化
T
之后注册了回调,并在移除T
之前移除了回调。我可能有多个
T
实例,并且其中一些可能同时用于回调的“源”(因此T
不是某种单例)。GoLang's Wiki中的
Function pointer callbacks
使用gateway function
,但我不知道如何使用它来适当地使用结构体的方法。