Как в MS VC вызвать функцию из dll?

tolik1

Сорри, вопрос, похоже, действительно глупый, но нигде и никто мне не смог дать на него ответь.
У меня есть библиотека R.dll, там есть функция, скажем, inf f(int хочу эту функцию вызывать из своей библиотеки cv.dll (её я и пишу).
Если я пишу


extern __declspec(dllimport) int f(int);


то на стадии линковки получается ошибка:


cvmclrt.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl f(int)" (__imp_?@Z)


Мне сказали, что можно писать так:


int (*pfint)
#define f (*pf)


При инициализации cv.dll загружать R.dll, вычислять оффсет f в R.dll, и устанавливать соответствующим образом pf. Но это как-то криво, должен же существовать правильный способ.

freezer

если с длл поставляется либ и хедер - то добавь либу в проект (или в настройках укажи в linker/input). Либо LoadLibrary+GetProcAddress

tolik1

Это строка как раз из R.h, который идёт вместе с R.dll


extern __declspec(dllimport) int f(int);


А вот R.lib или чего-то подобного я не нашёл. То есть, если R.lib нету, то только вторым способом?

shlyumper

R.lib можно сгенерировать из R.dll
Я это делаю обычно при помощи утилиты wlib от Watcom C++. Делается так:
wlib -fa r.lib +r.dll
получается r.lib, совместимый с MSVC++. Если нужно под Borland, то
wlib -fo r.lib +r.dll

tolik1

Great thanks!
PS: С днюхой, коли Глеб не врёт.
Оставить комментарий
Имя или ник:
Комментарий: