System.AccessViolationException при вызове C ++ из C # - PullRequest
2 голосов
/ 02 марта 2010

Не знаю почему, но сегодня myOpenID, похоже, не работает. В любом случае ... У меня есть проблема: у меня есть неуправляемая библиотека C ++ (DLL), которую я должен встроить в существующий проект C #. Теперь ... Я создал мини-оболочку (DLL) в управляемом C ++, которая вызывает библиотеку, чтобы я мог загрузить ее из кода C # и, когда я пробую ее из проекта C # из командной строки, она отлично работает, верно результаты, правильное поведение ecc.

Теперь, когда я загружаю его в реальный проект, он начинает выдавать мне странное исключение System.AccessViolationException, исходящее из DLL мини-оболочки. У меня нет опыта в C # и в целом в управляемой / неуправляемой разработке C ++ под Windows, и я просто не могу понять, почему это должно работать из проекта C #, а не из другого.

Дополнительная информация: исходная библиотека использует механизм рендеринга OGRE3D для выполнения вычислений, и проект, в котором я должен использовать эту библиотеку, использует OGRE под капотом, это может вызвать проблемы?

Есть предложения?

1 Ответ

1 голос
/ 13 апреля 2010

Вот несколько идей для вас, сэр ...

  1. Трудно точно сказать, что происходит, но первое, что я бы попытался сделать, это удалить этот управляемый c ++ dll из микса. Это может сбивать с толку. Где-то здесь создается впечатление, что данные не правильно распределены между управляемым и неуправляемым миром. Кроме того, то, что он не вылетает из консоли, не обязательно означает, что код работает правильно, он все еще может быть взломан, но не таким образом, который вызывает нарушение прав доступа. Первое, на что я хотел бы обратить внимание, это использовать p / invoke для непосредственного вызова вашей неуправляемой библиотеки DLL, если она сломается, вы должны знать об этом довольно быстро:

    Вызов Win32 DLL в C # с P / Invoke

  2. Возможно, что где-то в миксе этот указатель перемещается в другое адресное пространство, где этот указатель не имеет смысла. Есть ли здесь какие-нибудь границы процесса?

...