2016-09-08 5 views
1

Этот вопрос относится к , вызывающему собственный код через управляемый код из VB6 IDE/debugger. (Может быть, это будет применяться к отладке из других языков, то есть Delphi и т.д., но я не уверен.)System.DllNotFoundException из C# при вызове из кода VB6 в IDE


Мы называем библиотеки DLL C# через COM из VB6. C# DLL полагается на вызов собственного кода в скомпилированных DLL через p/invoke.

При запуске в VB6 IDE вызова в результаты # кода C в этом исключении:

System.DllNotFoundException: Unable to load DLL 'name_of_library': 
The specified module could not be found. 

Однако если мы запустим код VB6 компилируется эта ошибка не происходит. Все собственные DLL-файлы кода расположены рядом с скомпилированными DLL-библиотеками C#. Код VB6 создает EXE для приложения.

Зачем возникает эта ошибка?

+0

Я нашел обходное решение, которое я разместил ниже; но я не уверен, что это единственное решение или самое лучшее. – DaveInCaz

+0

Это не дубликат. Эта проблема специфична для взаимодействия с C# в среде VB6 IDE. Возможно, он может применяться и к другим IDE. – DaveInCaz

ответ

1

Проблема связана с расположением собственных DLL-файлов.

Когда все, включая EXE, скомпилировано, тогда все библиотеки DLL и EXE удовлетворяют порядку поиска, который Windows использует для поиска DLL.

Но при работе в среде VB6 IDE, видимо, находится местоположение самой IDE, которая определяет местоположение EXE, используемое в поиске DLL.

то есть в моем случае я должен был найти родной библиотеки DLL код в:

C:\Program Files (x86)\Microsoft Visual Studio\VB98

Когда я сделал это, было принято решение об ошибке. Это неудобно, но работоспособно.

+0

Ужасная идея, не изменяйте эту папку, найдите лучшее решение своей проблемы –

+0

Я не сказал, что это была «хорошая идея». Но это объясняет проблему. Альтернатива (как указано в вопросе) заключалась в том, чтобы скомпилировать код VB6, но тогда вы, очевидно, потеряете способность отлаживать в интерактивном режиме. VB6 - динозавр, и я могу согласиться с тем, что в настоящий момент может потребоваться некоторый уровень взлома, чтобы поддерживать его. – DaveInCaz

+2

Да, это правильное решение. Когда вы запускаете базовый код в среде IDE, он всегда интерпретируется. Таким образом, не существует исполняемого файла, который операционная система может использовать для поиска других DLL. Кроме одного, vb6.exe. Думаю, вы могли бы технически обезвредить переменную окружения PATH, а не точно, что лучше. Получение его для выполнения точного способа его выполнения на компьютере пользователя не является вариантом. –