Из вашей фразы довольно ясно, что вы используете Dev Studio, ту или иную версию.
Для того, чтобы неявно ссылаться на dll, VC ++ требуется файл .lib, никаких вопросов,Без .lib вы можете только явно загрузить dll, используя LoadLibrary и GetProcAddress.
К счастью, библиотеки импорта не содержат ничего, кроме экспортируемых символов dll, поэтому вполне законно просто создать проект dll в VC ++, который экспортируетидентичные символы, создайте его, а затем используйте полученный .lib-файл для доступа к целевой dll.
Хитрость в том, чтобы получить правильные символы: в зависимости от того, как была создана оригинальная dll, может быть некоторое украшение дляdeal with.
«Инициализировать» можно было экспортировать из dll несколькими способами при просмотре с помощью dependencywalker
- «Инициализация» - либо экспортировалась через a.Файл DEF или через
extern "C" __declspec(dllexport) int __cdecl Initialize(...
- "_ Initalize @ 16" - был экспортирован с использованием:
extern "C" __declspec(dllexport) int __stdcall Initialize(...
- ? Initialize @@ YAHPADOH @ Z "-` __declspec (dllexport) int Initialize (char *, char *, int);
- ? Initialize @@ YGHPADOH @ Z "-` __declspec (dllexport) int __stdcall Initialize (char *, char *, int);
Проблемаlem действительно является первым случаем - если соглашение о вызовах не __cdecl (а большинство API-интерфейсов DLL на самом деле __stdcall - все dll-окна - __stdcall), то вы должны использовать файл .def для экспорта недекорированных имен.