Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Экспорт / Подмена DLL 
:(
    Опции темы
MrKernighan
Дата 25.7.2011, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 2.1.2011

Репутация: нет
Всего: нет



Доброго времени суток Уважаемые эксперты. Я разобрался с проблемой "Точка входа в процедуру 'x' не найдена в DLL 'y'" но теперь возникла другая проблема (смотреть скрин), я уже устал и честно даже не знаю что уже делать.
Я тупой и наверное я не программист и больше слов у меня нет. Это уже 4 или 5 день от когда я взялся за эту задачу...

user posted image

Порыскал google, он мне сказал что такая проблема происходит когда где-то памяти не может произойти запись куда-то, таки да, открыл свой *.exe могучей Олькай, так она остановилась на этом месте (смотреть скрин).
Вообще *.exe работает отлично, не подумайте что это могут проблемы в *.exe, проблема изза моей *.dll

user posted image

~Описываю все действия что я сделал:
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 файл

Код
LIBRARY test
EXPORTS
glAccum
...

Благодаря definition файл я избавился от проблемы с точкой входа. Но что еще им нужно от меня? Что я упустил?
Я скажу не то что спасибо, я скажу нереально огромное спасибо за подсказку.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  GLApi.txt 93,76 Kb
PM MAIL   Вверх
bsa
Дата 25.7.2011, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



Ошибка здесь:
Код
char *GetLibraryDir(char *SysDLLName) {
    char *pBuffer;
    GetSystemDirectoryA(pBuffer, 255); //ты говоришь функции, что у тебя УЖЕ ЕСТЬ буфер на 255 чаров
    lstrcatA(pBuffer, SysDLLName);
    return pBuffer;
}
Убери эту функцию. Вообще.
PM   Вверх
MrKernighan
Дата 26.7.2011, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 2.1.2011

Репутация: нет
Всего: нет



Вот я лось тупорылый... bsa Низкий тебе поклон и огромное тебе спасибо, я уж думал мне решить этой задачи.

#Проблема решена.
PM MAIL   Вверх
ASMatic
Дата 28.7.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 14.3.2009

Репутация: 1
Всего: 1



MrKernighan, дабы не парится в будущем с непонятными сепшинами в юм
http://wasm.ru/forum/viewtopic.php?id=32181
полезная вещь от Clerk-а smile 
PM MAIL   Вверх
Dem_max
Дата 29.7.2011, 05:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Цитата

 HMODULE hDLL = LoadLibraryA("c:\windows\system32\opengl32.dl)

тут тоже не правильно, нужно делать так
Код

 HMODULE hDLL = LoadLibraryA("c:\\windows\\system32\\opengl32.dl)



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Alca
Дата 29.7.2011, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Не, так лучше  smile:
Код

HMODULE hDLL = LoadLibraryA("c:/windows/system32/opengl32.dl)



--------------------
PM WWW ICQ Skype Jabber   Вверх
GremlinProg
Дата 29.7.2011, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



еще лутше так
Цитата(Alca @  29.7.2011,  11:48 Найти цитируемый пост)
HMODULE hDLL = LoadLibraryA("c:/windows/system32/opengl32.dl")

 smile 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Dik0n
Дата 29.7.2011, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 11.5.2011

Репутация: 1
Всего: 10



А всех лучше так  smile 
Цитата(GremlinProg @  29.7.2011,  13:29 Найти цитируемый пост)
HMODULE hDLL = LoadLibraryA("c:/windows/system32/opengl32.dll")


--------------------
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ◄◄◄ Сотри монеткой защитный слой
PM MAIL WWW   Вверх
Alca
Дата 29.7.2011, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Не, так:
Цитата

HMODULE hDLL = ::LoadLibraryA("c:/windows/system32/opengl32.dll");

 smile 

Это сообщение отредактировал(а) Alca - 29.7.2011, 17:55


--------------------
PM WWW ICQ Skype Jabber   Вверх
volatile
Дата 29.7.2011, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 13
Всего: 85



Вы все что-то добавляете и добавляете, ... зачем?
Цитата
HMODULE hDLL = ::LoadLibraryA("c:/windows/system32/opengl32.dll");


1. Винда может находиться и не в "c:/windows" (и в этом случае код работать не будет)
2. Системная папка винды (system32) полюбому находится в путях поиска dll. (иначе и быть не может)

так что, :
Код

HMODULE hDLL = ::LoadLibraryA("opengl32.dll");

 smile 
PM MAIL   Вверх
bass
Дата 30.7.2011, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 5.8.2007

Репутация: 2
Всего: 2



Цитата(volatile @ 29.7.2011,  23:33)
Вы все что-то добавляете и добавляете, ... зачем?
Цитата
HMODULE hDLL = ::LoadLibraryA("c:/windows/system32/opengl32.dll");


1. Винда может находиться и не в "c:/windows" (и в этом случае код работать не будет)
2. Системная папка винды (system32) полюбому находится в путях поиска dll. (иначе и быть не может)

так что, :
Код

HMODULE hDLL = ::LoadLibraryA("opengl32.dll");

 smile

Читай тему с начало..... В нашей папке есть такая длл и подгрузиться она... Дальше при вызове функции все заклиниться...... -))))))) 
GetSystemDirectory Поможет -))))))

Это сообщение отредактировал(а) bass - 30.7.2011, 09:26
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0821 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.