· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› 2 Quantum про dll2lib

. 1 . 2 . 3 . 4 . 5 . 6 . >>

Посл.отвђт Сообщенiе


Дата: Май 18, 2004 05:38:46

Вот по статье Квантума хочу избавиться от нага в либе. Работаю в с++.
Извлек obj. Вставил его в проект.
Но при линковке выдается ошибка:
xDlg.obj : error LNK2001: unresolved external symbol _Function1

Function1 - это функция в либе (теперь в obj).
Как правильно использовать obj в с++?


Дата: Май 18, 2004 05:45:54

FEUERRADER
Честно говоря, я ещё не пробовал это дело на VC++. Сейчас попробую...


Дата: Май 18, 2004 05:51:07

Quantum

Если результаты будут положительные то придётся наверно
опять туторчик обновить ;-)


Дата: Май 18, 2004 07:27:30

Уже попробовал :-)

Итак:

1. Объявляем прототип функции по ординалу:
extern "C" void _imp_000000XX(void);

XX соответствует порядковому номеру функции в объектнике (это не совсем ординал, но почти :-)

Параметры можно не объявлять.

2. Создаём инлайновый переходник:
inline void Function1(int param1,int param2,int param3){
 _asm{
  push param3
  push param2
  push param1
  call DWORD PTR ds:_imp_000000XX
 }
}

Хотя это может показаться странным, но без DWORD PTR ничего не будет работать.

3. Добавить объектник в дерево проекта.

ЗЫ: Без макроса (п2) пока не получается.


Дата: Май 18, 2004 09:21:07

Quantum
Спасибо! Работает! Придется правда обновить тебе твой тутор, а то либы часто и в msvc++ используют :)


Дата: Май 18, 2004 13:24:10

Quantum

Я хочу использовать несколько obj в одном проекте. Но компилер ругается:
dll1.obj : error LNK2005: 00000098 already defined in dll2.obj
dll1.obj : error LNK2005: 00000099 already defined in dll2.obj
dll1.obj : error LNK2005: 0000009A already defined in dll2.obj
dll1.obj : error LNK2005: 0000009B already defined in dll2.obj
dll1.obj : error LNK2005: 0000009C already defined in dll2.obj
dll1.obj : error LNK2005: 0000009D already defined in dll2.obj
dll1.obj : error LNK2005: 0000009E already defined in dll2.obj
dll1.obj : error LNK2005: 0000009F already defined in dll2.obj
dll1.obj : error LNK2005: 000000A0 already defined in dll2.obj
dll1.obj : error LNK2005: 000000A1 already defined in dll2.obj
dll1.obj : error LNK2005: 000000A2 already defined in dll2.obj
dll1.obj : error LNK2005: 000000A3 already defined in dll2.obj
dll1.obj : error LNK2005: 000000A4 already defined in dll2.obj
dll1.obj : error LNK2005: 000000A5 already defined in dll2.obj

Чего делать?


Дата: Май 18, 2004 15:51:34

Find&Replace всей либы на предмет 000000 -> XXXXXX,
т.е. поменять нули на другие символы по всему obj
с помощью Hex редактора, и соответственно поправить инклуды.


Дата: Май 18, 2004 16:05:31

Лучше при поиске нулей впереди ещё искать хотя бы _ , т.е. так _000000 и замену применять с подтверждением ;-)


Дата: Май 18, 2004 16:47:21

Asterix
Грубый метод, но рабочий и это радует.


Дата: Май 18, 2004 16:50:11

Этот метод предложен Quantum'ом и он видимо единственный ;-)


Дата: Май 18, 2004 18:53:08

Asterix
Или зарегистрировать Dll2Lib :-)

FEUERRADER
Придется правда обновить тебе твой тутор
Да уж :-(


Дата: Май 18, 2004 19:06:51

Quantum
> Да уж :-(

Не забудь мне на мыло забросить, пожалуйста :-)
И какой-нить примерчик с инклудами и исходником, ну допустим для нашей многострадальной fmod.dll ;-)


Дата: Май 18, 2004 19:07:57

Quantum
Кстати, я облазил всю dll2lib.exe, но так и не нашел, где вставляется модульimp.obj (заметьте, что наг вставляется не во все либы, а значит, где-то это контролируется).
Не проще ли, чтоб наг в либу вообще не вставлялся?

Может кто раскопает эту dll2lib, чтоб наги не растыкивала везде, где ни попадя?


Дата: Май 18, 2004 19:10:35

Quantum
> Или зарегистрировать Dll2Lib :-)

Кстати, судя по всему сайт программы накрылся, новых версий тоже не вышло, скорее всего проект сдох..


Дата: Май 18, 2004 19:12:07

Asterix
ну допустим для нашей многострадальной fmod.dll
А на чём, по-твоему, я экспериментировал? :-)

Всё никак не пойму странности с DWORD PTR. Перед обновлением я ещё поэкспериментирую в поисках более простого решения.

. 1 . 2 . 3 . 4 . 5 . 6 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.119