использовать функцию из 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
добавлено
Просмотры: 1
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
добавлено