C # сбой при загрузке C ++ DLL - PullRequest
0 голосов
/ 09 апреля 2009

Моя программа написана на C # NET 2.0, она использует внешние функции из библиотеки DLL, написанной на C ++, с использованием Microsoft Visual Studio 2008 SP1. Если я удаляю dll из каталога, в который помещена программа, программа вылетает в тот момент, когда она должна использовать dll. Это нормально.

Но пользователи, которые используют мою программу, получают ту же ошибку в том же месте, не перемещая dll. У них всех есть C ++ Redistributable 2008 от > здесь <</a>

Это происходит из-за того, что я сделал программу в .NET 2.0 вместо NET 3.5, или это происходит потому, что распространяемый файл должен быть более старой версии?

Редактировать: Обратите внимание, программа работает нормально.

>> новая тема << </a>

Ответы [ 5 ]

1 голос
/ 09 апреля 2009

Скорее всего, неправильное время выполнения. Убедитесь, что вы распространяете правильный. Они всегда будут работать на вашем устройстве разработки, потому что время выполнения находится на пути. Для тестирования программного обеспечения я использую виртуальную машину Windows XP. Я настроил виртуальную машину как полностью новую установку, установил нужные мне компоненты (.NET Framework и т. Д.), Затем запустил мой установщик. При этом вы столкнетесь с удивительным количеством проблем с настройкой.

0 голосов
/ 09 апреля 2009

Нет разницы в этом контексте использования .NET 2.0 или 3.5.
Посмотрите в методе, где вы связываете и экспортируете функции из C ++ (если это неуправляемо) Если внешние функции были написаны на управляемом C ++, посмотрите подпись и версию библиотеки DLL

.
0 голосов
/ 09 апреля 2009

В вашем вопросе очень мало информации о фактическом сбое, которое может означать что-либо из многих. По моему опыту смешивания .NET и нативного C ++ многие проблемы могут возникать в параллельном режиме (SxS), особенно если DLL и приложение .NET были созданы с использованием разных версий компилятора.

Возможно, вам нужно воспроизвести эту проблему на локальном компьютере, чтобы отладить ее.

0 голосов
/ 09 апреля 2009

Dependency Walker может отлично подойти для отслеживания подобных проблем. Вы можете загрузить в него DLL, и она сообщит вам, если какая-либо из ее зависимостей недоступна. Иногда отсутствующие библиотеки DLL не обязательно являются проблемой (если вы не идете по этому пути кода), но это намного лучше, чем угадывать.

0 голосов
/ 09 апреля 2009

Распространяемый C ++, с которым вы связались, выглядит так, как будто он из оригинального выпуска Visual Studio 2008. Если это изменится с SP1, я могу видеть, что это вызывает сбой. Может быть, есть обновленная версия распространяемого файла, которую ваши пользователи должны установить?

...