2009-04-09 2 views
0

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

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

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

Редактировать: Примечание для меня программа работает нормально.

>>new thread<<

+0

Каково фактическое сообщение о сбоях для пользователей, где оно не работает? –

ответ

1

Ее, скорее всего, неправильное время выполнения. Убедитесь, что вы распространяете правильный. Они всегда будут работать в вашем блоке dev, потому что время выполнения находится на пути. Для тестирования программного обеспечения я использую виртуальную машину Windows XP. Я установил виртуальную машину как полностью новую установку, установил те компоненты, которые, как я знаю, мне нужны (.NET framework и т. Д.), А затем запустите мой установщик. Вы столкнетесь с неожиданным количеством вопросов, связанных с настройкой.

+0

Я принимаю только ваш ответ, потому что вы упомянули VM Box. Я использовал это. Пожалуйста, проверьте мой новый вопрос для получения дополнительной информации. –

0

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

0

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

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

0

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

0

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

Смежные вопросы