![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| umator |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.7.2002 Репутация: нет Всего: нет |
Как можно создать библиотеку импорта имея только DLL функции в которой имеют формат cdecl, т.е. имеют декорацию _Name, где Name - имя функции. Мне же необходимо получить библиотеку импорта в которой имена представлены в формате _Name@n где n - размер в байтах передаваемых параметров (формат __stdcall).
Спасибо!!! |
|||
|
||||
| bavc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 14.8.2002 Репутация: нет Всего: нет |
Не совсем понятно библиотека импорта это что?
|
|||
|
||||
| umator |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.7.2002 Репутация: нет Всего: нет |
Библиотека импорта это lib-файл с описанием набора экспортируемых DLL функций. Необходим для связи одного исполнимого модуля с другим методом раннего связывания.
|
|||
|
||||
| bavc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 14.8.2002 Репутация: нет Всего: нет |
Тогда не совсем понятно а зачем размер передаваемых байт
И стоит ли это того? |
|||
|
||||
| bavc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 14.8.2002 Репутация: нет Всего: нет |
В принципе мое мнение надо писать функцию которая ба вызывала это функции с dll
обявленную как __stdcall .... Или я чтото не понял? Или чтобы она автоматически конвертила dll в lib |
|||
|
||||
| umator |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.7.2002 Репутация: нет Всего: нет |
У меня возникла естественная необходимость задействования функций из уже созданной сторонней DLL. Все функции данной DLL имеют формат обмена параметрами - stdcall имена принимают вид _Name@n где Name - имя функции, n - размер в байтах передаваемых в функцию параметров. Так вот проблема: мне не создать библиотеку импорта по данной DLL с именами функций в необходимом виде. Я пытался воспользоваться утилитами lib.exe (из Visual C++), implib.exe (из Builder C++). Они создают библиотеку где функции описаны в формате stdcall (пример: kernel32.lib). А пока её нет, то получается, что я не могу воспользоваться функциями из DLL в своей программе.
|
|||
|
||||
| bavc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 14.8.2002 Репутация: нет Всего: нет |
А почему нет
в СРР помоему есть такая возможность вызывать длл функции напрямую в одном файле пишешь свои функции со своими параметрами и требованиями из них и вызываеш длловские разве не так. |
|||
|
||||
| umator |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.7.2002 Репутация: нет Всего: нет |
Почитай, пожалуйста, повнимательнее о чём я говорю.
|
|||
|
||||
| umator |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 21.7.2002 Репутация: нет Всего: нет |
Неужели никто кроме меня с этим не сталкивался?
|
|||
|
||||
| Geist |
|
|||
|
Unregistered |
Привет братец по несчастью. Могу ответить только на один твой вопрос: Я сталкивался с такой проблемой !!! Тоже бился и копался !!! Но мне очень кажется, что это большой глюк lib.exe, потому что в MSDN написано, что описывать экспортируемую функцию в def файле можно с указанием internalname так называемым внутренним именем. К примеру мне надо из ntdll.dll
достать функцию extern "C" ... WINAPI ZwConnectPort(...) Так вот я в def файле пишу _ZwConnectPort@32 = ZwConnectPort и как в МСДН пишут должно батрачить, но увы - глюк. Копался я в структуре lib, но там лес дремучий, так что я в таких же потемках как и ты... Если чтось узнаешь пиши сюда ответ, ладно ? |
|||
|
||||
| Grey |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 25.3.2002 Репутация: нет Всего: нет |
Можно написать dll которая будет оболочкой, и в ней сделать сделать функции для импорта cdecl. Вариант не самый простой, но все-таки это решение проблемы
|
|||
|
||||
| dim |
|
|||
|
Unregistered |
Вообще то это возможно. Получаем все эскпорты иэ dll:
dumpbin /exports out:mylib.def mydll.dll; потом правим mylib.def так чтобы привести его к формату .def файла; теперь генерим либу: lib /def:mylib.def out:mylib.lib |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |