Модуль обмена данными Intel Fortran с C # - PullRequest
4 голосов
/ 30 октября 2019

Учитывая следующий модуль Fortran, я пытаюсь получить ссылку на переменную A, чтобы я мог манипулировать ею непосредственно в C #.

    module FortranLibrary
    use Sample_Data

    implicit none

    real(8) :: A
    !DEC$ ATTRIBUTES DLLEXPORT :: A
    !DEC$ ATTRIBUTES ALIAS: 'A' :: A

    contains

    SUBROUTINE GetA(value)
        !DEC$ ATTRIBUTES DLLEXPORT :: GetA
        !DEC$ ATTRIBUTES ALIAS: 'GetA' :: GetA
        !DEC$ ATTRIBUTES REFERENCE :: value

        REAL(8), INTENT(OUT) :: value

        value = A

    END SUBROUTINE GetA

    subroutine DoWork()

        !DEC$ ATTRIBUTES DLLEXPORT :: DoWork
        !DEC$ ATTRIBUTES ALIAS: 'DoWork' :: DoWork

        A = 41

        return

    end subroutine DoWork

end module

Если я вызываю GetA, я получаю значение назад, а не ссылку (изменение переменной на стороне C # не влияет на переменную Fortran и наоборот. Если я вызываю A, я получаю следующееисключение:

System.AccessViolationException: 'Попытка чтения или записи защищенной памяти. Это часто указывает на повреждение другой памяти.'

Не могу сказатьЯ удивлен этим, потому что A - экспорт данных, и хотя я ясно вижу его в списке как функцию в обходчике зависимостей, я понятия не имею, какой прототип у этой функции будет, или даже если это действительно функция или просто несовершенныйПользовательский интерфейс в средстве обхода зависимостей.

Вот как я импортирую эти элементы в C #:

[DllImport("FP1_Library.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void DoWork();
[DllImport("FP1_Library.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void GetA(ref double val);
[DllImport("FP1_Library.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void A(out double val);

Может кто-нибудь помочь мне экспортировать ссылку на переменную модуля в C #?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...