Firestore не может загрузить список

Ваша ошибка здесь:

FUNCTION create_pointer() RESULT(c_intptr_t) BIND(C, name = "create_pointer")

Вы должны поместить имя переменной внутри result части объявления функции. Затем вы можете использовать имя, которое вы там помещаете внутри тела функции, а значение, которое оно имеет при завершении функции, будет значением результата, возвращаемым функцией.

В вашем коде вы помещаете имя c_intptr_t, которое совпадает с именем, которое вы только что импортировали из встроенного модуля, и вы фактически перекрываете его. Я не думаю, что это намерение.

Кроме того, как сказал @francescalus, у вас нет implicit none, поэтому вы позволяете умолчанию неявным правилам Fortran выбрать тип вашей переменной результата; и он выбирает реальное значение по умолчанию (поскольку имя переменной начинается с буквы C), поэтому указатель имеет размер 32 бита.

c_intptr_t является константой внутри встроенного модуль iso_c_binding, предназначенный для использования в качестве параметра типа для интероперабельного целого, который получает правильный размер указателя системы.

Вы можете изменить имя переменной внутри результата, например, ptr, и измените объявление функции на это:

function create_pointer() result(ptr) bind(C, name = "create_pointer")
  use, intrinsic :: iso_c_binding, only: c_intptr_t
  implicit none
  integer(c_intptr_t) :: ptr
end function

1
задан Fantômas 19 January 2019 в 18:04
поделиться