использовать функцию из dll в visual studio 2010 (visual c ++)

Я сделал dll из моего проекта и экспортировал функцию, используя extern «C», как и код ниже:

main.cpp

extern "C" __declspec(dllexport) void __cdecl  VectorOfMarker(char*     InAdd,vector& VectorMarkers)
 {
    DetectSeg d;
    d.VectorOfMarker(InAdd,VectorMarkers);
 }

Я создаю проект и успешно создаю файлы .dll и .lib. то я создаю новый визуальный проект c ++ и пытаюсь использовать эту DLL и упомянутую функцию в нем. Хотя я скопировал файлы .dll и .lib в один и тот же каталог, но я не могу использовать extern «C» для импорта моей функции во второй проект. Я думаю, что мне нужно изменить некоторые настройки в visual studio 2010, чтобы использовать функции Может ли кто-нибудь помочь мне в этом? Как использовать экспортированную функцию?

Слишком большое спасибо заранее

0
nl ja de

1 ответы

Я думаю, вы смущены тем, какой тип DLL вы строите.

Есть два типизированных динамических ссылок, неявных и явных , Чтобы динамически связать dll неявно, вы создаете dll, которая экспортирует некоторые функции и/или переменные. Это создаст библиотеку DLL и библиотеку импорта .lib. Модуль, который использует этот тип dll, должен иметь заголовочный файл с прототипами функций и должен быть связан с библиотекой импорта .lib. Таким образом, вы связываете время компиляции. Поскольку экспорт осуществляется с использованием __declspec (dllexport) и __declspec (dlleimport) и экспортированных имен функций, декорированы (искажены). Они выглядят? ExportedTest @@ YAXPAD @ Z.

Другой тип - это явное связывание, и это, скорее всего, то, что вы делаете. Обычно для этого типа DLL-функции экспортируются с использованием файлов .def для создания имен функций, которые не оформлены. Это также может быть достигнуто с помощью модификатора extern «C», чтобы сообщить компилятору C ++ компилировать функцию как стиль C, поэтому экспортированная функция не украшена, а usre _ (подчеркивание).

Чтобы использовать этот тип DLL, у вас есть тип и параметры функции todeclare, вызовите Load library и GetProcAddress, чтобы получить указатель на функцию. Затем вы сможете сделать звонок следующим образом:

typedef void (*DLLVectorOfMarker)(char*, vector&);

HMODULE hMod = LoadLibrary(_T("ExportTest.dll"));//your lib name goes here

DLLVectorOfMarker pfnVectorOfMarker = (DLLVectorOfMarker)GetProcAddress(hMod, "VectorOfMarker");


vector  VectorMarkers;

pfnVectorOfMarker("some string", VectorMarkers);
0
добавлено
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest