Как вызвать функции C DLL C++/CLI

Я просмотрел много онлайн-запросов, и у большинства есть примеры, которые говорят о С# с C или C++ с С#, но никогда не сталкивались с использованием вызова C DLL из C++ (в частности из C++/CLI с WPF в моем случае).

Может ли кто-нибудь объяснить, как вызвать функции C DLL в C++. У меня есть C DLL, которая имеет все свои функции, определенные как extern "C" funcName(), и есть также файл.exf функций экспорта, который имеет все имена функций, которые нужно экспортировать. Теперь, имея эту C DLL, как я могу вызвать ее экспортированные функции в коде C++.

Благодарю.

2
16 мая '14 в 21:01
источник поделиться
2 ответов

ОК, поэтому "WPF с C++" не является языком. WPF - это библиотека.NET. C++/CLI - это язык, на котором вы пишете.

Вызов C dll из C++/CLI "довольно прост", в зависимости от того, как экспортировалась DLL. Вы можете использовать библиотеки.NET для этого или библиотеки C (я предлагаю библиотеки C). Существует два способа ссылки на dll: неявное связывание или явное связывание.

Неявное соединение гораздо чище, имхо. Но вам нужен доступ к файлу заголовка (Edit: возможно, с описаниями declspec, см. Примечания BenVoigt ниже) и.lib файл. Если у вас есть какие-либо из них, просто добавьте файл.lib в дополнительные зависимости (щелкните правой кнопкой мыши project-> Properties-> Конфигурация Properties-> Linker-> Input) и добавьте путь к файлу заголовка в include (справа -click project-> Properties-> Конфигурация Properties-> C/C++ → Общие). Затем вы можете включить заголовочный файл (реквизиты для метакодирования для упоминания этого) в качестве заголовочного файла extern "C":

extern "C"
{
   #inlude "c_header.h"
}

(это связано с тем, что C++ выполняет управление именами, так что вы можете перегружать пространства имен и классов и т.д. Он будет интерпретировать ваш заголовочный файл C как заголовочный файл C++ (и калечить все ваши имена) t использовать extern "C")

http://msdn.microsoft.com/en-us/library/d14wsce5.aspx

Или вы можете явно указывать

http://msdn.microsoft.com/en-us/library/784bt7z7.aspx http://msdn.microsoft.com/en-us/library/zzk20sxw.aspx

Но я подозреваю, что выясняя, что вы используете C++/CLI, это скажет вам, что делать с Google. (Хотя ответы C++ будут работать и для вас).

Для пути.NET простой трюк заключается в поиске вызова С# (обратите внимание, что это также явная связь, и, следовательно, не требует файла.lib и заголовков).

http://msdn.microsoft.com/en-us/library/eyzhw3s8.aspx

Теперь хитрый бит, что если вы используете C++/CLI и хотите, чтобы ваши фантазии управляемых классов в форме C, вам придется мобилизовывать код. Вот удобная ссылка на вкладку, которая показывает вам, как это сделать.

http://msdn.microsoft.com/en-us/library/ac7ay120%28vs.71%29.aspx

6
16 мая '14 в 21:12
источник

Вызов функции dll d из DLL C++ точно такой же, как для WPF, C++/CLI, так и для родного C++.

  1. Включите файл заголовка. См. Ниже синтаксис.
  2. Добавьте .lib в качестве зависимости от импорта для вашего проекта. Также установите компоновщик для использования DLL. См. Ссылку неявно для всех деталей.
  3. Убедитесь, что потребляемая DLL присутствует во время пути выполнения во время выполнения программы.
  4. Используйте функцию, определенную в файле заголовка.

Заголовочный файл должен быть объявлен как:

extern "C" {
    #include "c_header.h"
}

Все это!

EDIT: Также проверьте это: Вызовите функцию C из кода C++.

2
16 мая '14 в 21:16
источник

Посмотрите другие вопросы по меткам или Задайте вопрос