Я использую C # в Mono и пытаюсь использовать pinvoke для вызова разделяемой библиотеки Linux.
Вызов c # определяется как:
[DllImport("libaiousb")]
extern static ulong AIOUSB_Init();
Функция Linux определяется следующим образом:
unsigned long AIOUSB_Init() {
return(0);
}
Команда компиляции для кода Linux:
gcc -ggdb -std=gnu99 -D_GNU_SOURCE -c -Wall -pthread -fPIC
-I/usr/include/libusb-1.0 AIOUSB_Core.c -o AIOUSB_Core.dbg.o
Я могу вызвать функцию нормально, но возвращаемое значение - помешательство. Должно быть 0, но я получаю какое-то огромное искаженное число.
Я поместил printf в код Linux непосредственно перед возвратом значения функции, и это правильно.
Одна вещь, которую я заметил, немного странная, это то, что printf должен произойти до того, как функция вернется. Однако я вижу, что функция возвращает C #, а затем c # печатает возвращаемый результат, и, наконец, отображается результат printf.