我在 Raspberry Pi 2(ARM 7 和单声道)上使用 F#。我目前正在尝试使用用 C 编写的 WiringPi 库。我已经成功地使用 P/Invoke 来使用一些函数。
现在我尝试使用中断(参见http://wiringpi.com/reference/priority-interrupts-and-threads/ http://wiringpi.com/reference/priority-interrupts-and-threads/)但我被这个具有以下 C 签名的函数难住了
int wiringPiISR (int pin, int edgeType, void (*function)(void));
已翻译(参见https://github.com/danriches/WiringPi.Net/blob/master/WiringPi/WrapperClass.cs https://github.com/danriches/WiringPi.Net/blob/master/WiringPi/WrapperClass.cs) 由 Daniel Riches 编写成这样的 C# 库
//This is the C# equivelant to "void (*function)(void))" required by wiringPi to define a callback method
public delegate void ISRCallback();
[DllImport("libwiringPi.so", EntryPoint = "wiringPiISR")]
public static extern int wiringPiISR(int pin, int mode, ISRCallback method);
我到底该如何在 F# 中做到这一点?我猜 DllImport 行看起来像这样(“方法”在 F# 中保留)
[<DllImport("libwiringPi.so", EntryPoint = "wiringPiISR")>]
extern int wiringPiISR(int pin, int mode, ISRCallback callBack);
ISRCallback 的类型定义是什么样的?
注意:这不仅仅是“一个”函数指针,而且是一个带有 void 参数的 void 函数指针。