powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / обертка-клон для dll
78 сообщений из 78, показаны все 4 страниц
обертка-клон для dll
    #39896039
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые форумчане!
К несчастью, в работе с dll у меня огромный пробел, а тут надо сразу, да еще и не совсем стандартно. В общем, осваиваю на бегу, но без вашей помощи не обойтись.
К сути вопроса: есть dll1 и приложение, которое с этой dll1 успешно работает. Но есть потребность несколько расширить функционал, добавив сбор статистики. Ни разработчики dll1, ни разработчики приложения дорабатывать продукт не готовы, т.к. им этот функционал не интересен, поэтому надо как-то выкручиваться. В наличии dll, h и lib файлы. На выходе надо получить dll2, которая для приложения должна выглядеть совершенно так же, как dll1, но в некоторых функциях кроме того, что делает dll1, должны выполняться дополнительные действия.
Теорию по dll изучаю, а как сделать такой клон, пока понять не могу. Объясните, пожадуйста, на простейшем примере, как это должно выглядеть?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896049
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills,

Попробуй такую схему: пишешь dll, которая загружает и вызывает функции dll1. Подменяешь ей исходную dll1. Если всё работает - вставляешь свои костыли в вызовы. Напиши сначала сам минимальный пример, в котором будет приложение, dll и одна функция. Попробуй её подменить.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896052
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читай Рихтера Windows via C/C++ про перехват вызовов API-функций.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896067
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
добавив сбор статистики
какой? Для кого?
Для прогеров статистика это количество вызовов function X.
Для руководства это посещение страницы Y 567 раз.
Для второй, надо не перехватывать, а брать исходники и вставить в конструктор класса Y слово Log()
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896070
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills,
Если есть исходники и ты программист, то глупо ими не воспользоваться.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896071
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Читай Рихтера Windows via C/C++ про перехват вызовов API-функций.

это уже тяжёлая артиллерия

обычно хватало варианта от crutchmaster


ills
Но есть потребность несколько расширить функционал, добавив сбор статистики. Ни разработчики dll1, ни разработчики приложения дорабатывать продукт не готовы

а решение этой проблемы не из области программрования на С
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896195
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

Мне понятно, что надо в свой проект подключить dll1.h и dll1.lib и реализовать вызов соответствующих функций. Мне не понятно, как получить в итоге клон, ведь функции исходной dll и новой называются одинаково?
Например, в библиотеке dll1 есть экспортируемая функция, которая выводит банальное "Hello world"
Код: plaintext
1.
extern "C" dll1_API void hello_world();


В "расширенном" клоне эта функция должна к этому "Hello world" выводить еще, например, "Привет, мир".

Для того, чтобы все заработало, мне надо сделать следующее:
1) переименовать библиотеку dll1 в dll1old (она же будет использоваться, в моей библиотеке, а моя библиотека должна называться dll1, чтобы с ней могло работать приложение)
2) добавить в проект dll1.h от исходной библиотеки и подключить dll1.lib
3) в своем проекте создать cpp и h файлы, в которых будет реализация новой функции hello_world. Или h-файл создавать не надо, т.к. он идентичен добавленному от исходной библиотеки? А если надо, то что в нем прописывать?
4) и, собственно, в cpp-файле
Код: plaintext
1.
2.
3.
4.
5.
void hello_world()
{
	cout << "Привет, мир" << endl;
	hello_world();
}


Все правильно, или я что-то не так понимаю?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896196
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
Спасибо за рекомендацию, изучу
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896199
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

так нет исходников) и dll, и приложение - сторонние разработки. К разработчикам за расширением функционала обращались, получили отказ
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896210
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
PetroNotC Sharp,

так нет исходников) и dll, и приложение - сторонние разработки. К разработчикам за расширением функционала обращались, получили отказ
это прояснили. Понятно.
А про статистику промолчали.
Так как вам нужна статистика совершенно чужого приложения. В народе говорят что это взлом.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896221
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

Статистика - это несколько обобщенно и упрощенно) В некоторых функциях надо добавить запрос от пользователя дополнительных параметров, затем запрос к web-сервису для проверки этих параметров на актуальность, и еще добавить работу с дополнительной БД, в которую будут записываться результаты и еще некоторая информация, необходимая в дальнейшем для составления отчетов и контроля
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896225
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

собственно, с разработчиком dll эта работа согласована, но исходниками, естественно, никто не поделится (да это и бессмысленно, т.к. dll время от времени обновляется)
Возможно, это и можно называть взломом, но тут цель сугубо созидательная, ни правообладателю исходной dll, ни правообладателю приложения имущественного вреда нанесено не будет
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896233
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
В некоторых функциях надо добавить запрос от пользователя дополнительных параметров,
вы исполнитель или постановщик?
Еще конкретнее. Имя функции, ее параметры дайте.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896236
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
PetroNotC Sharp,

так нет исходников) и dll, и приложение - сторонние разработки. К разработчикам за расширением функционала обращались, получили отказ

Ну так и не трогай dll1. Создай еще одну dll, а в .h добавь декларацию экспортируемых функций.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896242
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Это не взлом. Это танцы на костылях по граблям и ямам. Через год надо будет обновить приложение, а ТС найдёт нормальную работу. Прослойка отвалится, приложение отвалится, сорцы потеряют. По-доброму тем разрабам надо приделать какие-то внешние хуки в своё приложение, а не заставлять клиентов заниматься чёрти чем.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896249
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

я исполнитель (собственно, это было обозначено в первом вопросе). Как может помочь название функции и ее параметры, если вопрос у меня в другом? Или это для того, чтобы убедиться, что я не собираюсь сделать что-то противозаконное?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896250
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills,
Я сомневаюсь в идее. Поломать то все можно.
Например, как вы добавите параметр если их длл его не примет?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896251
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
Код: plaintext
1.
2.
3.
4.
5.
void hello_world()
{
	cout << "Привет, мир" << endl;
	hello_world();
}


Где добавка параметра?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896252
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
Мне не понятно, как получить в итоге клон, ведь функции исходной dll и новой называются одинаково?
забыть про статическую линковку подменяемой библиотеки к проекту и вызывать её функции динамически, используя LoadLibrary, GetProcAddress, etc
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896253
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

Возможно, через год разработчики приложения поймут, что не только нам нужен этот функционал, и добавят его в новый релиз и необходимость в этой прослойке отпадет (и это будет здорово на самом деле). Естественно, разработчикам dll это не интересно, т.к. в ней это все реально не нужно, но мы тут заложники ситуации, поэтому приходится как-то выкручиваться :(
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896254
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills,

Что за приложение хоть и что оно делает?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896257
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
crutchmaster,

Возможно, через год разработчики приложения поймут, что не только нам нужен этот функционал, и добавят его в новый релиз и необходимость в этой прослойке отпадет (и это будет здорово на самом деле). Естественно, разработчикам dll это не интересно, т.к. в ней это все реально не нужно, но мы тут заложники ситуации, поэтому приходится как-то выкручиваться :(
понятно. Денег им нет заплатить и решили что сами все сделаете.
Ничего личного.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896259
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

параметры добавлять не нужно в функции, они остаются без изменений. Т.е. вместо
Код: plaintext
1.
cout << "Привет, мир" << endl;

будет вывод диалога для ввода значения и запрос к web-сервису для проверки этого значения на актуальность. И уже после этих проверок выполнение функции исходной dll
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896260
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
вывод диалога
а если там поток?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896261
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

да нет, там гораздо сложнее, они не видят смысла в этой доработке и не хотят нагружать приложение ненужным функционалом
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896263
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
параметры добавлять не нужно
а если там структура? Как вы параметр получите?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896264
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
ills

Где добавка параметра?
ну чего ты до парня докопался?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void hello_world()
{
	int param = getUserParameter();
	if( !check_param( param ) ) {
		cout << "Беда, надо было ввести 5" << endl;
		return;
	}
	cout << "Привет, мир " << param << endl;
	hello_world();
}
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896266
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
они не видят смысла в этой доработке и не хотят нагружать приложение ненужным функционалом
они правы. Запрос на сервис в вызове dll это идиотизм.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896267
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

об этом не думали, вы правы. А как тогда быть?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896270
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
ну чего ты до парня докопался?
тебе хирургом быть. Чё там думать, дайте пилу я отрежу быстро)))
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896273
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
А как тогда быть?
а) Впредь составлять им ТЗ с исходниками Б) написать свой экзешник на их dll
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896279
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills,
Тут рядом чел пишет только гуи на Qt.
Если у вас как у него, то накидать шкурку раз плюнуть).
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896283
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
ills
Мне не понятно, как получить в итоге клон, ведь функции исходной dll и новой называются одинаково?
забыть про статическую линковку подменяемой библиотеки к проекту и вызывать её функции динамически, используя LoadLibrary, GetProcAddress, etc

Вообще это интересный вопрос. Если у меня в приложении есть функция foo() и она же есть в двух сторонних dll с которыми мне нужно работать. Отказываться от линковки с dll? Странно это как-то.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896289
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
ills
они не видят смысла в этой доработке и не хотят нагружать приложение ненужным функционалом
они правы. Запрос на сервис в вызове dll это идиотизм.

Почему? После того как dll подгружается в адресное пространство процесса - код внутри dll мало чем отличается от кода внутри exe.

Если обязанность dll осуществлять взаимодействие с сервером - и это нужно для повторного использования...
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896291
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Вообще это интересный вопрос. Если у меня в приложении есть функция foo() и она же есть в двух сторонних dll с которыми мне нужно работать. Отказываться от линковки с dll? Странно это как-то.
One Definishion Rule ибо, слышал о таком?))
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896296
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Потому что заморозится ГУИ на экране.
Конечно на это можно плюнуть.
petrav
повторного использования...

Тут надо все смотреть.
Классы, шаблоны проектирования, слои, ООП.
Обычно платформа определяет архитектуру.
Если Qt кругом сигналы. То это многое решает по повторному коду.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896297
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
petrav
Вообще это интересный вопрос. Если у меня в приложении есть функция foo() и она же есть в двух сторонних dll с которыми мне нужно работать. Отказываться от линковки с dll? Странно это как-то.
One Definishion Rule ибо, слышал о таком?))

Слышал, конечно. Но как бы это всё же сторонний модуль. В .lib файле есть информация об именах экспортируемых функций. Неужели нет настройки линковщика что бы изменить эти **экспортируемые** названия. Там же простая таблица: "строковое имя функции - смещение/адрес".

Т.е. я не могу подключить две dll если у них экспортируемые функции совпадают по названиям?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896301
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav,
Потому что заморозится ГУИ на экране.
Конечно на это можно плюнуть.

Многопоточность не? Конечно, тут всё нужно смотреть. Может вызовы этой dll и так в другом потоке и им позволительно работать протяжённое время. А?

Но вообще выглядит всё это как костыль.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896302
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Т.е. я не могу подключить две dll если у них экспортируемые функции совпадают по названиям?
профи, подскажите.
В дельфи кроме длл есть пакеты. Это та же dll только с инфой о классах и типах.
В шарпе тоже.
Получается что в плюсах нет такого удобного механизма…?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896303
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Многопоточность не?
да. И асинхронность а ля каллбэк.
Но код нужно писать на событиях или сигналах. ЗАРАНЕЕ.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896304
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Т.е. я не могу подключить две dll если у них экспортируемые функции совпадают по названиям?

Нужен аргумент линковщика типа: --changeName=dll1.lib:funcName:newFuncName. И руками исправить заголовочник dll1.h.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896306
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Но вообще выглядит всё это как костыль.
по теме ТС конечно костыль и риски провала проекта.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896311
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav
Многопоточность не?
да. И асинхронность а ля каллбэк.
Но код нужно писать на событиях или сигналах. ЗАРАНЕЕ.

Тут дело в том, что информация от сервера очевидно не нужна ни старой dll, ни exe файлу. Это какой-то их личный костыль который они хотят впердолить между dll и exe и писать что-то в свою БД.. Не вижу проблем реализовать многопоточную архитектуру внутри новой dll.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896319
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Не вижу проблем реализовать многопоточную архитектуру внутри новой dll.
новую разработку можно. Старую однопоточную без исходников запустить с потоками нельзя.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896321
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills,

я чёт не пойму, ладно dll не твоя, приложение то тоже не твоё что ли?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896322
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Т.е. я не могу подключить две dll если у них экспортируемые функции совпадают по названиям?
А подумать?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896328
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
petrav
Т.е. я не могу подключить две dll если у них экспортируемые функции совпадают по названиям?
А подумать?

А подумать о том что я пишу? Это явная загрузка DLL. А я говорил про линковку и неявную загрузку DLL, если ты понимаешь о чём я говорю.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896329
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),
Не его. Чужое. И хозяева против)
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896331
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Я dll на плюсах не делал. А вот в exe везде заводил пространство имён.
- в дллках есть такое? Решает вашу проблему?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896332
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav
Не вижу проблем реализовать многопоточную архитектуру внутри новой dll.
новую разработку можно. Старую однопоточную без исходников запустить с потоками нельзя.

Я имею ввиду реализовать многопоточную архитектуру внутри новой DLL. Без изменений старой DLL и EXE. Это не проблема.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896334
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
внутри новой DLL. Без изменений старой DLL
а толку. То есть в посреднике?
Будет очередь в один поток и узкое место старая дллка. Как COM раньше.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896336
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan),

именно) было бы мое (наше), то и проблем бы никаких
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896339
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav
внутри новой DLL. Без изменений старой DLL
а толку. То есть в посреднике?
Будет очередь в один поток и узкое место старая дллка. Как COM раньше.

Нет, в DllLoad() создаём свой поток. Он спит на условной переменной. Когда приходит вызов функции новой DLL... Нам осталось только передать информацию для запроса на сервер и записи данных в созданный поток. И перенаправить вызов в старую DLL.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896340
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,
Я как бы этого в его ответах просто не вижу, вся речь про dll и как её подцепить
Поэтому у меня и возникло это предположение. Может тут реально надо начинать с "включить розетку"

В обратной же ситуации для начала надо понять, не отвалится ли dll-ка при динамической загрузке
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896342
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
А я говорил про линковку и неявную загрузку DLL, если ты понимаешь о чём я говорю.
А если, всё-таки, подумать?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896343
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav,
Я dll на плюсах не делал. А вот в exe везде заводил пространство имён.
- в дллках есть такое? Решает вашу проблему?

Я несколько усложнил задачу: мы подключаем две сторонние dll, которые экспортируют две Си-шные функции с одним именем. А в Си нет неймспейсов. Свою то функцию и переименовать можно.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896345
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
Может тут реально надо начинать с "включить розетку"
можно попробовать. Я ему сказал, давай сигнатуру. Не хочет.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896347
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Нет, в DllLoad() создаём свой поток. Он спит на условной переменной. Когда приходит вызов функции новой DLL... Нам осталось только передать информацию для запроса на сервер и записи данных в созданный поток. И перенаправить вызов в старую DLL.
мы решаем проблему заморозки?
Чтобы не было заморозки надо в посреднке за 0,05 сек передать управление обратно в exe. Дллка старая успевала. А ты как успеешь на сайт сходить?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896351
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
А в Си нет неймспейсов
легаси код рассматривать я пас. Не интересно.
Только если математика какая на 4 ядра процессора.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896352
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav
Нет, в DllLoad() создаём свой поток. Он спит на условной переменной. Когда приходит вызов функции новой DLL... Нам осталось только передать информацию для запроса на сервер и записи данных в созданный поток. И перенаправить вызов в старую DLL.
мы решаем проблему заморозки?
Чтобы не было заморозки надо в посреднке за 0,05 сек передать управление обратно в exe. Дллка старая успевала. А ты как успеешь на сайт сходить?

Я передаю информацию о запросе на сервер в другой поток - другой поток будет лезть на сервер. И сразу же вызываю старую dll, а потом сразу возвращаю управление в exe.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896353
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
в DllLoad() создаём свой поток.

Что значит "в DllLoad()"?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896359
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Я передаю информацию о запросе на сервер в другой поток - другой поток будет лезть на сервер. И сразу же вызываю старую dll, а потом сразу возвращаю управление в exe.
ну дак инфа не успеет. Поезд уйдет.
Представь если я на onPaint строки таблицы спрашивал каким цветом красить должников в dll?
1000 запросов в сек.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896364
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
petrav
Я передаю информацию о запросе на сервер в другой поток - другой поток будет лезть на сервер. И сразу же вызываю старую dll, а потом сразу возвращаю управление в exe.
ну дак инфа не успеет. Поезд уйдет.
Представь если я на onPaint строки таблицы спрашивал каким цветом красить должников в dll?
1000 запросов в сек.

Так дело то в том, что EXE в onPaint() даже не предполагает, что есть какая-то БД, он думает, что общается со старой DLL - она ему всю инфу даёт для отрисовки. А прослойка в новой DLL просто статистику пишет в отдельном потоке . Я так вижу задачу.

Другое дело, что там в прослойка-dll планировался какой-то запрос к пользователю ещё (GUI?).
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896384
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
petrav
Т.е. я не могу подключить две dll если у них экспортируемые функции совпадают по названиям?

Нужен аргумент линковщика типа: --changeName=dll1.lib:funcName:newFuncName. И руками исправить заголовочник dll1.h.
да, это выход, но так скучно)))
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896389
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Другое дело, что там в прослойка-dll планировался какой-то запрос к пользователю ещё (GUI?).
логирование без проблем.
Проблема в модальных диалогах и т.д.
И получения переменной без хидера.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896401
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
В наличии dll, h и lib файлы.


Сколько прототипов в .h?
Используется ли декорация имен?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896543
ills
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav,

а как это делается? где можно об этом почитать?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896567
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
petrav,

а как это делается? где можно об этом почитать?

То что я описал достаточно сложно. Тут на пальцах не расскажешь. Нужно для начала Вам хотя бы создать эту промежуточную dll, которая будет просто вызывать старую dll и больше ничего.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896633
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
. В наличии dll, h и lib файлы. На выходе надо получить dll2, которая для приложения должна выглядеть совершенно так же, как dll1, но в некоторых функциях кроме того, что делает dll1, должны выполняться дополнительные действия.



Как эти действия должны выглядеть?
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896657
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ills
На выходе надо получить dll2, которая для приложения должна выглядеть совершенно так же, как dll1, но в некоторых функциях кроме того, что делает dll1, должны выполняться дополнительные действия.


Когда я решал подобные задачи, я использовал 2 пути:
1. Когда библиотека экспортирует мало функций (мой критерий до 10-15), я писал библиотеку, которая экспортирует тот же список функций, что и оригинал, затем подкидывал программе свою библиотеку, которая уже и подгружала оригинал, в который форвадила вызовы. Пример - перехват функций DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer у оле-библиотеки.

2. Если библиотека экспортирует много функций, я внедрял в процесс свою библиотеку, которая перехватывала обращения только к интересующим меня функциям. Пример - перехват файловых операций Kernel32.dll

Читал, что есть третий путь - создание специальной библиотеки, в секции экспорта которой сразу можно указать, что данная функция экспортируется данной библиотекой, а реализована в другой, но сам этот путь не исследовал.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896900
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
Читал, что есть третий путь - создание специальной библиотеки, в секции экспорта которой сразу можно указать, что данная функция экспортируется данной библиотекой, а реализована в другой, но сам этот путь не исследовал.
в сумму просто не входит оплата московских понтов, вакуха явно расчитана на регионы.

Дмитрий Мух
alexeyvg
пропущено...
Я тоже вашу логику не понимаю.

Что с того, что "вам хватит" эти 2-3 вакансии, если на них претендует ещё 5000 человек?

Вам же не 2-3 оффера дали, которые вам достаточно заапрувить, вы просто увидели 3 подходящих вакансии.

Это не описывает рынок.
5000? ну вы и загнули

подходящих специалистов на хорошие вакансии тоже не много
а из 2-3 подходящих вакансий, один оффер да есть
крайний раз было 2 оффера из 3-х вакансий, последним уже написал, что определился и не пошёл на второе собеседование
немного, но ничтожно редко кто ищет 100% подоходящего канидата, да и то их знают, и если уж впритык как нужно, просто будет личное преложение без перелопачивания 5000 приходящих.

Вот как на мороз сходите, потом раскажете свою саксес-стори. Преложения почти ничего не значат, только реальный кеш - шанс нарваться на обман и оказаться в поиске на пол годика в текущей ситуации очень велик.
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896913
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

пардонс, не туда написал
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896916
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
Читал, что есть третий путь - создание специальной библиотеки, в секции экспорта которой сразу можно указать, что данная функция экспортируется данной библиотекой, а реализована в другой, но сам этот путь не исследовал.
слабо верится, как минимум один jmp ещё добавится
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896935
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
слабо верится, как минимум один jmp ещё добавится
.def-файлы .
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896968
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
kealon(Ruslan)
слабо верится, как минимум один jmp ещё добавится
.def-файлы .
там под модулем как я понимаю понимается объектный файл

я исходя из релоков соображение выношу, фактически по формату можно релок установить только на адреса своей dll-ки
в принципе конечно можно зная что нужная dll грузится по стабильному адресу (например системные dll) задать жёсткий адресс
но это будет как бы нелогично да и подозрительно если GetProcAddr будет выдавать адресс из другой dll
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896983
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
слабо верится, как минимум один jmp ещё добавится


Посмотрите по фразе "dll export forwarding"
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39896993
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064,

хм, точно есть
надо будет подправить кое-что у себя
...
Рейтинг: 0 / 0
обертка-клон для dll
    #39897003
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
как я понимаю
Предположение - мать всех провалов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.
Dump of file api-ms-win-core-file-l1-2-0.dll
File Type: DLL
  Section contains the following exports for api-ms-win-core-file-l1-2-0.dll
    00000000 characteristics
    5CAEAB1A time date stamp Thu Apr 11 10:48:58 2019
        0.00 version
           1 ordinal base
           4 number of functions
           4 number of names
    ordinal hint RVA      name
          1    0          CreateFile2 (forwarded to kernel32.CreateFile2)
          2    1          GetTempPathW (forwarded to kernel32.GetTempPathW)
          3    2          GetVolumeNameForVolumeMountPointW (forwarded to kernel32.GetVolumeNameForVolumeMountPointW)
          4    3          GetVolumePathNamesForVolumeNameW (forwarded to kernel32.GetVolumePathNamesForVolumeNameW)
  Summary
        1000 .rsrc
        1000 .text
...
Рейтинг: 0 / 0
78 сообщений из 78, показаны все 4 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / обертка-клон для dll
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]