|
|
| Посл.отвђт | Сообщен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. Перед обновлением я ещё поэкспериментирую в поисках более простого решения. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.119 |