У меня большой проект C ++ с интерфейсом.
Я создал оболочку C ++ / CLI для связи с проектом.
Он состоит из управляемых классов, каждый из которых содержит ссылку на собственный объект и функции-оболочки. У проекта есть фабричный метод, создающий объект и возвращающий его как абстрактный класс, основной объект наследует (давайте назовем его IObject).
При вызове заводской функции " createObject " в C ++ все работает хорошо. Также в C ++ / CLI объект возвращается и работает правильно. Но в C # после того, как обе библиотеки DLL присутствуют и на них ссылается управляемая библиотека, когда я попадаю в функцию управляемой библиотеки DLL " createObject ", программа вылетает во время выполнения, говоря:
Необработанное исключение типа 'System.AccessViolationException'
произошло в wrapper.dll
Дополнительная информация: Попытка чтения или записи в защищенную память.
Это часто указывает на то, что другая память повреждена.
Это не похоже на проблему с маршалингом, поскольку она должна возвращать только указатель на собственный объект.
Я попытался создать фабричные функции, возвращающие некоторые структуры и строки, и все работало хорошо.
Я думал, что это может произойти, потому что абстрактный объект класса (IObject), возвращаемый функцией фабрики, меньше, чем сам объект (Object - который наследует от него), поэтому объект содержит больше данных, чем должен иметь размер IObject. Но так работают фабричные шаблоны! Я не вижу другого пути.
Заранее спасибо.