Я думаю, вы смущены тем, какой тип 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);