Произошло необработанное исключение типа «System.AccessViolationException» в неизвестном модуле - PullRequest
0 голосов
/ 19 сентября 2019

Я получаю эту ошибку при выполнении расчета.Я совершенно сбит с толку, поскольку по сути скопировал другой метод и просто изменил его, чтобы иметь правильные параметры и имя.Я пытаюсь вызвать THERM2dll, который является методом из REFPROP (написано на Фортране).Я использую REFPROP C # обертку для доступа к методам.Как правильно реализовать метод THERM2dll (и другие, которые будут добавлены позже) и устранить эти ошибки?

An unhandled exception of type 'System.AccessViolationException' occurred in Unknown Module.
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Нажатие Continue Execution обеспечивает это:

Managed Debugging Assistant 'FatalExecutionEngineError' : 'The runtime has encountered a fatal error. The address of the error was at 0x2970390f, on thread 0x322c. The error code is 0xc0000005. This error may be a bug in the CLR or in the unsafe or non-verifiable portions of user code. Common sources of this bug include user marshaling errors for COM-interop or PInvoke, which may corrupt the stack.'

IЯ довольно потерян.Вот соответствующий код.Как я уже говорил выше, этот код почти идентичен (кроме параметров) другим частям кода (который работает нормально).Программа работала нормально, пока этот код не был добавлен:

Form1.cs

IRefProp64.THERM2dll(ref tk, ref density, x, ref zz);

IRefProp64.cs

[DllImport(@"C:\Program Files (x86)\REFPROP\REFPRP64.dll", CharSet = CharSet.Ansi)]
        public static extern void THERM2dll
        (
            ref double t,                                                           // temperature [K]
            ref double Dl,                                                          // molar density [mol/L]
            [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] double[] x,      // composition [array of mol frac]
            ref double zz                                                           // (OUTPUT) compressibility factor [-]
        );

Примечание от разработчиков класса оболочки для вашей информации: IRefProp - эффективный интерфейс C # для REFPROP.Это проект с открытым исходным кодом (размещается / будет размещаться на github), который содержит статический класс-оболочку (IRefProp64), обеспечивающий доступ к методам собственного кода REFPROP, таким как SETPATHdll (…), SETUPdll (…), SATSPLNdll (…),…...... и т.п.

...