2013-04-02 3 views
0

Я пишу приложение для рабочего стола Win8 для мониторинга состояния bluetooth (среди других функций) с помощью Visual Studio 2012. Я указал Bthprops.lib в свойствах проекта -> дополнительные зависимости. Я построил DLL с кодом Bluetooth и вызвал его из проекта C#.условно пропускает зависимости dll

Все работает хорошо на Win8. Однако, когда мое приложение запускается в Windows Server 2012, при запуске я получаю неспособность загрузить DLL, потому что win server 2012 не поддерживает Bluetooth и не имеет зависимого bthprops.cpl.

Поскольку я хочу, чтобы мое приложение работало на нескольких платформах (и не хочет, чтобы пользователи устанавливали дополнительные компоненты), в ситуациях, когда платформа не имеет требуемого зависимого файла, я хочу, чтобы приложение могло начать , пропустить выполнение кода Bluetooth и выполнить остальные функции.

Возможно ли это? Как я могу это достичь?

Спасибо

ответ

2

Я боюсь, что вы должны динамически загрузить DLL с помощью LoadLibrary(). При этом у вас нет зависимости от запуска. Кроме того, вы можете проверить, завершена ли загрузка. Если это не так, компонент не установлен. Это делает возможным использование ошибочного механизма задержки.

В этом случае вы не используете файл библиотеки. Вместо этого вы просто используете либо файл заголовка, либо вы найдете соответствующие функции dll, используя GetProcAddress()

+0

благодарю вас за ответ, поскольку он указал мне в правильном направлении. Из dependencyWalker я увидел, что моя DLL не загружалась на win server 2012 из-за отсутствия «bthprops.cpl». Я читал, что .cpl - это просто специализированная dll, я просто динамически загружаю этот файл с помощью LoadLibrary() и использую GetProcAddress() так же, как и в DLL-файле? – user1631605

+0

быть справедливым - я не знаю. Но вы можете легко попробовать. Другой способ - инкапсулировать cpl в вашей собственной DLL. Эта DLL загружает cpl при запуске, используя механизмы, которые вы используете раньше. Но вы динамически загружаете свою dll. Но я полагаю, что он работает. Похоже, что файлы cpl - это только dll, которые следуют конкретному соглашению. –