Как связать и собрать проект, если ваш внешний SDK содержит только файлы .dll, .lib, .h

У меня есть внешний SDK, который содержит только файлы .dll, .lib и .h. Я пытаюсь использовать SDK. В dll ничего не читается, но в файлах .h есть комментарии к методам. Я не очень разбираюсь в С++. Я предполагаю, что мне нужно загрузить библиотеку, а затем прочитать из dll, используя методы, определенные в файлах .h. Правильный?

Мне нужно знать, как написать проект cpp, где я могу связать все эти файлы, прочитать dll и иметь возможность использовать методы, определенные в SDK. Есть ли тестовый проект с настройкой проекта, где я могу посмотреть, как это можно сделать? Любая помощь будет оценена по достоинству.


person Kamy D    schedule 21.11.2017    source источник
comment
Вероятно, вам просто нужно связать библиотеку и файлы заголовков, а также иметь dll в каталоге приложения. Какой SDK вы используете? Это, вероятно, помогло бы.   -  person pepperjack    schedule 21.11.2017
comment
Простой. Включите заголовочный файл в исходный код, как и любой другой заголовочный файл. Свяжите файл lib при связывании. Поместите dll в тот же каталог, что и ваш исполняемый файл. Вот и все.   -  person David Heffernan    schedule 21.11.2017


Ответы (1)


Есть несколько способов добиться этого, в том числе метод быстрого доступа с использованием #pragma, который я не буду рекомендовать, если он приведет к развитию вредных привычек.

Точно так же вы можете использовать Таблицы свойств, но поначалу это может показаться немного сложным. Итак, я собираюсь дать вам стандартный средний подход...

В настройках вашего проекта (Alt-F7 или Проект > Свойства...) вам необходимо установить следующие параметры:

  • C/C++ > Общие > Дополнительные каталоги включения

    Добавьте папку, в которой вы хотите искать, используя директиву #include. Не усложняя это личными предпочтениями и соображениями стиля, просто установите это в каталог, в котором находится заголовочный файл SDK.

    Вы можете использовать абсолютные или относительные пути, переменные окружения. Что бы ни. Я предлагаю вам просто использовать абсолютный путь.

  • Компоновщик > Общие > Дополнительные каталоги библиотек

    То же, что и выше, но здесь находится файл .lib.

  • Компоновщик > Ввод > Дополнительные зависимости

    Это имя вашего файла lib.

Теперь, если вы #include скопируете заголовочный файл SDK в исходный код вашего проекта и скомпилируете его, мы надеемся, что он сработает. И шаг связывания также должен быть успешным.

Если нет, вам могут понадобиться дополнительные вещи, чтобы SDK работал хорошо (например, определения препроцессора, настройки компилятора или дополнительные зависимости).

Последнее, о чем вам нужно беспокоиться, это то, что запуск вашей программы может завершиться неудачно, потому что DLL не может быть найдена, если только она не находится в определенном месте, которое ищет Windows. Вместо того, чтобы возиться с путями поиска DLL и т. д., вы можете использовать событие после сборки, чтобы скопировать DLL в тот же каталог, где был собран ваш исполняемый файл.

Тем не менее, в свойствах проекта:

  • События сборки > Событие после сборки

    Добавьте командную строку, например:

    copy "\Path\To\MySDK\MySDK.dll" "$(OutDir)\"
    

Теперь вы должны быть готовы к работе, и вам больше не придется об этом думать!

person paddy    schedule 21.11.2017
comment
Спасибо! Вы спасли меня! Почти просто чтобы добавить к этому ответу, я понял, что с таким подходом мне больше не нужно использовать LoadLibrary()! - person Kamy D; 23.11.2017