FatalExecutionEngineError при вызове функции из другой сборки - PullRequest
0 голосов
/ 13 мая 2019

Мой вопрос: почему работает описанное ниже решение проблемы?Введение: у меня есть небольшое приложение на сервере c ++, которое выполняет свою бизнес-логику в c #Я использую DllExport для (обратного) пинвока.Все хорошо, все быстро, стабильно, без утечек или каких-либо проблем.C # состоит из нескольких сборок (все версии 4.7.2, x64 как собственные), но я сохраняю экспорт только в одной.

Проблема: одна часть разработки побудила меня вызвать тривиальную утилиту публичной статической функции издругая сборка, которая содержит только один файл с одним статическим классом с около 15 вспомогательными функциями и одним интерфейсом

public interface ISerializable
        {
            BinaryWriter  serial(BinaryWriter w);
            //ISerializable serial(BinaryReader w);//itself
        }

Когда отладчик попадает в функцию, он сразу вызывает исключение нулевого указателя, а когда я нажимаю продолжить, он бросаетFatalExecutionEngineError.Исключение происходит при вызове функции, прежде чем что-либо еще произойдет.При взгляде на сборочный отладчик это происходит по инструкции CALL.Опять же, не было никаких проблем со стеком или чего-то необычного.

То, что я пробовал: будучи параноиком по поводу устранения ошибок с моей стороны, я создал чистый вызов pinvoke, который внутренне вызывал только простую тестовую функцию, ничего не делающую из того же класса,Он сразу разбился.Когда я переместил эту тестовую функцию в новый статический класс в той же сборке, она сработала ....

Что сработало: В отчаянии я переместил интерфейс в отдельный статический класс, и все начало работать.

Очевидно, это кодирование грузового культа, и я хотел бы понять, как отладить проблему.Как теоретически dllexport / pinvoke может вызвать эту ошибку?Кто-нибудь видел что-нибудь подобное?

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