Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.89.56.228] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Есть прога, состоящая из екзешника и библиотеки(dll-ки). У меня есть исходники библиотеки, соответственно я могу внести нужные правки, скомпилить и собрать dll-файл. Но если я его закину к экзешнику, заменив имеющуюся dll-ку, то получаю ошибку "Не найдена точка входа... в библиотеку...". Как сие побороть\исправить? Сразу говорю - править исходники экзешника и собрать его по новой не могу.
|
Сообщ.
#2
,
|
|
|
Первый тест - собери библиотеку БЕЗ ПРАВОК. И попробуй подключить - отпишись.
|
Сообщ.
#3
,
|
|
|
Сообщ.
#4
,
|
|
|
Majestio
Пробовал, все то-же. Цитата macomics @ посмотреть список имен функций, которые exe импортирует из этой библиотеки dll Зачем? Я же написал, и экзешник и библиотека - один проект, просто править библиотеку я могу а экзешник нет. Просто давно уже подзабросил с WinAPI ковыряться, не помню как там реализовано подключение библиотек к экзешнику. Помню, что вроде есть какой-то 16-значный идентификатор, и бла-бла-бла... |
Сообщ.
#5
,
|
|
|
А причем тут WinAPI. У меня нету вашего exe - я просто взял любой попавшийся под руку и показал как пример импорт из KERNEL32.DLL
Вам надо найти такой же список в своем exe, но для своей библиотеки. Дописать в секцию экспорта библиотеки все те функции, которые exe ждет от нее. Иначе он не запустится. При сопоставлении имен импортируемых функций в exe и экспортируемых функций из dll загрузчик выдаст ошибку "Не найдена точка входа... в библиотеку..." и все остановится на этом. Таким образом необходимо обеспечить, чтобы из библиотеки экспортировались все функции, которые импортирует из нее exe. А для этого надо иметь на руках полный список этих функций. Как его получить я вам уже написал. |
Сообщ.
#6
,
|
|
|
Цитата AndreySol @ .. получаю ошибку "Не найдена точка входа... в библиотеку...". Как сие побороть\исправить? .def - файл подключен к dll проекту ? Добавлено Цитата macomics @ Еще можно открыть этот exe в hex редакторе.. Лучше взять спец-утилиту и посмотреть экспорт из оригинальной dll и вновь собранной. И сравнить список функций. |
Сообщ.
#7
,
|
|
|
Цитата ЫукпШ @ Лучше взять спец-утилиту и посмотреть экспорт из оригинальной dll и вновь собранной. И сравнить список функций. Тогда уж не из оригинальной, а из самого этого exe. Спасибо что напомнили. Поищите depends. Утилита, которая позволяет просматривать импорт и экспорт. |
Сообщ.
#8
,
|
|
|
Цитата macomics @ Тогда уж не из оригинальной, а из самого этого exe. Причём тут exe ? Он исправен и не интересен. Интересна разница в dll-ях. Эту разницу экспорта и надо смотреть. Можно так (приаттачено) Прикреплённый файлpe_tut07_export.zip (1,84 Кбайт, скачиваний: 49) |
Сообщ.
#9
,
|
|
|
Цитата ЫукпШ @ Причём тут exe ? Он исправен и не интересен. Интересна разница в dll-ях. Эту разницу экспорта и надо сотреть. Скрытый текст MajestioПервый тест - собери библиотеку БЕЗ ПРАВОК. И попробуй подключить - отпишись. AndreySolПробовал, все то-же. Этот вариант уже не катит. На это уже ответили. Exe нужен, чтобы определить недостающие функции, присутствие которых он ожидает в этой библиотеке. Из-за отсутствия одной из таких функций и получается ошибка. Но так как редактировать можно только библиотеку, тогда посмотреть исходный список можно только в exe. |
Сообщ.
#10
,
|
|
|
Цитата macomics @ Скрытый текст MajestioПервый тест - собери библиотеку БЕЗ ПРАВОК. И попробуй подключить - отпишись. AndreySolПробовал, все то-же. Этот вариант уже не катит. На это уже ответили. Предлагаемый эксперимент к экспорту dll отношения не имеет. И вообще смысла в нем мало. Как раз начинать надо со сравнения экспорта dll. |
Сообщ.
#11
,
|
|
|
Цитата ЫукпШ @ Как раз начинать надо со сравнения экспорта dll. Так вы меня так и не поняли. У него нету dll, с которой exe запускается. Тогда и остается только сравнивать список импорта exe со списком экспорта dll. В списке экспорта dll могут присутствовать лишние функции, но в нем же должны быть все функции из списка импорта exe. т.к. изменять можно только код dll, тогда только и остается что дополнить список ее экспорта недостающими функциями, хотя бы на уровне stub'ов. |
Сообщ.
#12
,
|
|
|
Цитата У него нету dll, с которой exe запускается. Отвечу вам вашей же записью: Так вы меня так и не поняли. Есть проект, который в виде исходников под VS-студию. Экзешник и библиотека собраны из этих исходников. Экзешник собран не мной, и в него внесены правки. Я собрал библиотеку не внося в нее никаких правок и она не подключается к экзешнику. Ошибка подробнее: Цитата Точка входа в процедуру ?mem_alloc@xrMemory@QAEPAXI@Z не найдена в библиотеке ....xrSE_Factory.dll Код экзешника и библиотеки: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { .... HMODULE hFactory; LPCSTR g_name = "xrSE_Factory.dll"; Log ("Loading DLL:",g_name); hFactory = LoadLibrary (g_name); if (0==hFactory) R_CHK (GetLastError()); R_ASSERT2 (hFactory,"Factory DLL raised exception during loading or there is no factory DLL at all"); .... return (0); } BOOL APIENTRY DllMain(HANDLE module_handle, DWORD call_reason, LPVOID reserved) { switch (call_reason) { case DLL_PROCESS_ATTACH: { g_temporary_stuff = &trivial_encryptor::decode; Core._initialize("xrSE_Factory",NULL,TRUE,"fsfactory.ltx"); string_path SYSTEM_LTX; FS.update_path(SYSTEM_LTX,"$game_config$","system.ltx"); pSettings = xr_new<CInifile>(SYSTEM_LTX); CCharacterInfo::InitInternal(); CSpecificCharacter::InitInternal(); break; } case DLL_PROCESS_DETACH: { .... } } return (TRUE); } в буфере обмена имеется лог ошибки: Цитата Expression : hFactory Function : WinMain File : .\xrAI.cpp Line : 225 Description : Factory DLL raised exception during loading or there is no factory DLL at all Как я понимаю, проблема в том, что сборка делалась в разных версиях VS-студии, т.е. разные версии компиляторов\компоновщиков. Как это побороть, причем на стороне dll-ки, т.к. править экзешник я не могу, потому-что потеряю правки сдкланные не мной. M Используем тег [code]! |
Сообщ.
#13
,
|
|
|
Цитата AndreySol @ Отвечу вам вашей же записью: Так вы меня так и не поняли. Вот как раз описанное вами и означает: "У него нету dll, с которой exe запускается". Пускай exe и dll из одного проекта, но exe не запускается с той dll, которая у вас есть. Цитата AndreySol @ Expression : hFactory Function : WinMain File : .\xrAI.cpp Line : 225 Description : Factory DLL raised exception during loading or there is no factory DLL at all Ошибка во время сопоставления списка импортируемых exe функций и экспортируемых dll функций. Открываете exe с помощью Блокнот, hex-редактора или depends и ищите список импорта. Приводите список экспорта в библиотеке к списку импорта exe (чтобы все имена из списка импорта присутствовали в списке экспорта). Как вы этого добьетесь - ваша задача. Подробностей про компилятор вы не оставили. Привести имена к похожему виду можно и вручную - точно их определив для экспортируемой функции (чтобы студия не добавляла к именам свои приписки вроде "?mem_alloc@xrMemory@QAEPAXI@Z" - подчеркнуто). Но приписки, которые уже существуют в именах функций из списка импорта exe файла вам надо будет перенести и определить их, задавая точные имена экспортируемым из dll функциям. Поэтому без исследования списка импорта exe и не обойтись. |
Сообщ.
#14
,
|
|
|
Цитата AndreySol @ Ошибка подробнее: Цитата Точка входа в процедуру ?mem_alloc@xrMemory@QAEPAXI@Z не найдена в библиотеке ....xrSE_Factory.dll AndreySol, стандартные библиотеки подключены к проекту dll ? А также все другие необходимые. Все ли необходимые модули (исходники) подключены к проекту ? |
Сообщ.
#15
,
|
|
|
Цитата AndreySol @ Majestio Пробовал, все то-же. Ну вот, видишь, первый шаг ты прошел успешно! Код библиотеки без твоих правок - неработоспособен. Как говорят, отсутствие результата - уже есть результат. Что делать дальше - я не знаю. Но перво-наперво я бы замарочился с отладкой. Что исполняемый модуль желает загрузить (я про DLL), и что он там хочет найти. Сорян, дальше - это выше моей компетенции. Дальше сам + Гугыль + СтекОверфлов |