Нужно сделать
.lib
-файл самостоятельно. Посмотрите, нет ли в комплекте с
.dll
файла
.def
. Если есть, то можно получить
.lib
с помощью
lib.exe /DEF:mylib.def mylib.dll
или
lib.exe /DEF:mylib.def /OUT:mylibname.lib mylib.dll
если нужно другое имя. В таком виде (
dll
+
def
), распространяется, например,
sqlite3
.
Если
.def
-файла нет, посмотрите, какие у вас символы в библиотеке через
dumpbin /exports mylib.dll
Если это практически те же имена, что и в заголовочном файле, значит, библиотека экспортирует символы в стиле С; это хорошо. Перечислите все нужные имена в командной строке:
lib.exe /EXPORT:mylib_func1 /EXPORT:mylib_func2 mylib.dll
(
.def
-файл, по сути, делает то же самое.) Единственное, я сейчас не помню, но к именам может спереди добавлятся подчеркивание. Я не уверен, нужно ли указывать имена с подчеркиванием или без.
Если там имен нет, значит, они отрезаны, функции можно определить только по порядковому номеру. Если вокруг них всякая муть, это C++, а муть означает закодированный тип параметров. Это все не очень хорошо, конечно, потому что соответствие номеров функциям не определить (разве что экспериментально), а стандарта на кодирование нет. Но технически создать .lib-файл можно, у опции /EXPORT полная сигнатура такая:
/EXPORT: entryname[= internalname][,@ ordinal[, NONAME]][, DATA]
То есть можно и переименовать функцию, и по номеру ее выбрать, и данные экспортировать. Но это на крайний случай.
lib.exe
обычно не в PATH, из обычной командной строки не найдется, но в группе инструментов Visual Studio должно быть что-то вроде «Command Prompt» — он открывает консоль и добавляет нужные пути в PATH, так что инструменты командной строки становятся доступными.
Ссылки:
dumpbin,
lib.