Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Экспорт / Подмена DLL |
Автор: MrKernighan 25.7.2011, 19:26 | ||
Доброго времени суток Уважаемые эксперты. Я разобрался с проблемой "Точка входа в процедуру 'x' не найдена в DLL 'y'" но теперь возникла другая проблема (смотреть скрин), я уже устал и честно даже не знаю что уже делать. Я тупой и наверное я не программист и больше слов у меня нет. Это уже 4 или 5 день от когда я взялся за эту задачу... http://radikal.ru/F/i018.radikal.ru/1107/a5/e4ae866e0afb.jpg.html Порыскал google, он мне сказал что такая проблема происходит когда где-то памяти не может произойти запись куда-то, таки да, открыл свой *.exe могучей Олькай, так она остановилась на этом месте (смотреть скрин). Вообще *.exe работает отлично, не подумайте что это могут проблемы в *.exe, проблема изза моей *.dll http://radikal.ru/F/i073.radikal.ru/1107/b4/98332c3ca1b4.jpg.html ~Описываю все действия что я сделал: 1) Подставил фейк opengl32.dll в директорию с моим приложением чтобы происходило чтение моей *dll а не оригинальной opengl32 из системной директории. 2) Экспортирую все функции используемые *.exe приложением следующим образом. Код объемный в 2к с копейками строчек, изза количество функций, поэтому вынужден сделать вложение но приведу еще 1 пример как я это делаю. # Указатель на оригинальную функцию - void (APIENTRY *ptr_glAccum) (GLenum op, GLfloat value); # Получаем модуль - HMODULE hDLL = LoadLibraryA("c:\windows\system32\opengl32.dl) # Получаем адрес ориг. функции - (FARPROC&)ptr_glAccum = GetProcAddress(hDLL, "glAccum"); # Экспортируемая функция - DLLExport void __stdcall glAccum(GLenum op, GLfloat value) { ptr_glAccum(op, value); } И конечно же *.def файл
Благодаря definition файл я избавился от проблемы с точкой входа. Но что еще им нужно от меня? Что я упустил? Я скажу не то что спасибо, я скажу нереально огромное спасибо за подсказку. |
Автор: bsa 25.7.2011, 23:30 | ||
Ошибка здесь:
|
Автор: MrKernighan 26.7.2011, 00:52 |
Вот я лось тупорылый... bsa Низкий тебе поклон и огромное тебе спасибо, я уж думал мне решить этой задачи. #Проблема решена. |
Автор: ASMatic 28.7.2011, 14:33 |
MrKernighan, дабы не парится в будущем с непонятными сепшинами в юм http://wasm.ru/forum/viewtopic.php?id=32181 полезная вещь от Clerk-а ![]() |
Автор: Dem_max 29.7.2011, 05:15 | ||||
тут тоже не правильно, нужно делать так
|
Автор: Alca 29.7.2011, 09:48 | ||
Не, так лучше ![]()
|
Автор: GremlinProg 29.7.2011, 13:29 |
еще лутше так![]() |
Автор: Dik0n 29.7.2011, 17:32 | ||
А всех лучше так ![]()
|
Автор: Alca 29.7.2011, 17:39 | ||
Не, так:
![]() |
Автор: volatile 29.7.2011, 23:33 | ||||
Вы все что-то добавляете и добавляете, ... зачем?
1. Винда может находиться и не в "c:/windows" (и в этом случае код работать не будет) 2. Системная папка винды (system32) полюбому находится в путях поиска dll. (иначе и быть не может) так что, :
![]() |
Автор: bass 30.7.2011, 09:23 | ||||||
Читай тему с начало..... В нашей папке есть такая длл и подгрузиться она... Дальше при вызове функции все заклиниться...... -))))))) GetSystemDirectory Поможет -)))))) |