Я использую F # на малине Pi 2 (ARM 7 &, таким образом, моно). В настоящее время я пытаюсь использовать библиотеку WiringPi, написанную на C. Мне удалось успешно использовать некоторые функции, используя P/Invoke.Функции вызова Invoke F #
Теперь я пытаюсь использовать прерывания (см http://wiringpi.com/reference/priority-interrupts-and-threads/), но я озадачен этой функцией со следующей С подписью
int wiringPiISR (int pin, int edgeType, void (*function)(void));
переведенной (см https://github.com/danriches/WiringPi.Net/blob/master/WiringPi/WrapperClass.cs) Даниилом князи в 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 выглядеть?
Примечание: это не только указатель функции «a», но и пустое, с аргументами пустоты.
Возможный дубликат [Как передать делегат F # методу P/Invoke, ожидающему указателя функции?] (Http://stackoverflow.com/questions/5682927/how-can-i-pass-an-f -delegate-to-ap-invoke-method-expecting-a-function-pointer) – Sehnsucht
Определенно связанный с этим вопросом, но не совсем ответил на него. –