Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 134
1

Как сделать DLL прослойку

15.08.2018, 20:29. Показов 1415. Ответов 6
Метки dll (Все метки)

Имеется экзешник, который работает с libcef.dll старой версии.

Мне нужно чтобы он работал с dll новой версии.
Если я подсовываю ему libcef.dll новой версии то он ругается на отсутствие точки входа "cef_browser_create".


cef_browser_create - это функция , неким аналогом которой (по моему возможно ошибочному мнению) является функция cef_browser_host_create_browser_sync из новой dll.

Можно ли сделать прослойку (libcef.dll) которая бы просто транслировала все функции в настоящую libcef.dll, а функцию cef_browser_create транслировала бы в cef_browser_host_create_browser_sync ?

Надеюсь хоть более менее понятно объяснил
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2018, 20:29
Ответы с готовыми решениями:

Как сделать dll из PJSIP
Добрый день. Вот библиотека PJSIP. Мне нужно ее скомпилировать в dll. Я создал проект библиотеки...

Как сделать сложный проект(.ехе+.dll)? Как там они сводятся?
Как сделать сложный проект(.ехе+.dll)? Как там они сводятся?

Как сделать дамп dll, написанной на C++?
Прошу прощение за глупый вопрос, но как сделать дамп dll чтобы был код c++?

Как сделать прослойку жира под кожей(отъестся на зиму), чтоб зимой не мерзнуть?
Собственно, сабж. Я высокий и худой, жир не задерживается под кожей, а зимой холодно. Как мне...

6
Параллельный Кот
1902 / 825 / 349
Регистрация: 25.03.2016
Сообщений: 2,041
15.08.2018, 22:03 2
Полагаю, что это путь к созданию прокси-dll. За неимением опыта в этой предметной области, ничего конкретного советовать не буду. Ознакомьтесь со статьей Создание прокси-dll для запуска DirectDraw игр в окне (Habr), возможно это то, что нужно или натолкнет на верные мысли.

Добавлено через 23 минуты
Кстати, обратите внимание на то, что в старо cef_browser_create
1
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 134
15.08.2018, 22:37  [ТС] 3
Спасибо, а что не так в cef_browser_create

Я там, правда, указал по ссылкам не тела функций, а участки кода с её вызовами , по ошибке
0
Параллельный Кот
1902 / 825 / 349
Регистрация: 25.03.2016
Сообщений: 2,041
15.08.2018, 22:45 4
Цитата Сообщение от FreakMurderer Посмотреть сообщение
а что не так в cef_browser_create
Хотел сказать, что в старой версии cef_browser_create используется в методе CreateBrowser, а в новой версии в этом же методе используется cef_browser_host_create_browser, без "_sync". Извиняюсь, отправил случайно неполное сообщение.

Тут еще подумал, возможно, создание прокси-dll ради одной функции (отличающейся только именем, даже не интерфейсом) немного не оправданно. Было бы здорово добавить в таблицу экспорта новой dll функцию со старым именем. К сожалению, пока не удалось найти, как это сделать. Рассмотрите еще этот вариант, может быть Вам больше повезет в поиске информации.
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 134
16.08.2018, 18:47  [ТС] 5
Никак не могу понять, почему здесь
https://www.codeproject.com/Ar... omatically
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// AcceptEx
extern "C" __declspec(naked) void __stdcall __E__0__()
{
    __asm
    {
        jmp p[0*4];
    }
}
 
// EnumProtocolsA
extern "C" __declspec(naked) void __stdcall __E__1__()
{
    __asm
    {
        jmp p[1*4];
    }
}
 
// EnumProtocolsW
extern "C" __declspec(naked) void __stdcall __E__2__()
{
    __asm
    {
        jmp p[2*4];
    }
}
автор в квадратных скобках постоянно умножает на 4, вместо того чтобы оставлять обычные индексы.
0
Параллельный Кот
1902 / 825 / 349
Регистрация: 25.03.2016
Сообщений: 2,041
16.08.2018, 21:24 6
Цитата Сообщение от FreakMurderer Посмотреть сообщение
автор в квадратных скобках постоянно умножает на 4, вместо того чтобы оставлять обычные индексы.
Это же Assembler, он подчиняется немного другим правилам. Если в C/C++ мы пишем:
C++
1
2
3
4
p[0]; // Нулевой элемент массива.
p[1]; // Первый элемент массива.
//...
p[10]; // Десятый элемент массива.
То в ассемблере у похожей конструкции совсем иной смысл.

Assembler
1
2
3
4
5
p[1]    ; Это тоже самое, что p + 1, т.е. адрес начала массива p плюс 1 байт.
p[1*4]; Масштабируем индексацию умножая на размер хранимых в массиве элементов.
           ; FARPROC в win32 имеет размер 4 байта.
           ; Теперь это уже p + 1 * 4, что эквивалентно записи p[1] на языке C++.
p[2*4]; Эквивалент записи p[2] на языке C++.
Можно конечно и не умножать, а сразу писать 0, 4, 8, ..., но это не очень наглядно.

Добавлено через 8 минут
Вот небольшая программка, демонстрирующая эту разницу.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <Windows.h>
#include <iostream>
 
using namespace std;
 
FARPROC p[75];
 
uint32_t get_value_0()
{
    __asm
    {
        mov EAX, p[0]
    }
}
 
uint32_t get_value_1()
{
    __asm
    {
        mov EAX, p[1]
    }
}
 
uint32_t get_value_1_star_4()
{
    __asm
    {
        mov EAX, p[1*4]
    }
}
 
int main()
{
    for (uint32_t i = 0; i <= 75; i++)
    {
        p[i] = reinterpret_cast<FARPROC>(i + 1);
    }
 
    cout << "sizeof(FARPROC): " << sizeof(FARPROC) << endl;
 
    cout << "p[0] = " << get_value_0() << endl;
    cout << "p[1] = " << get_value_1() << endl;
    cout << "p[1*4] = " << get_value_1_star_4() << endl;
 
    system("pause");
    return 0;
}
mov EAX, <что-то там> - это возврат значения из функции, стандартизируется в ABI, в C++ для 32-битной программы значение функции возвращается в регистре процессора EAX, если это возможно.
1
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 134
16.08.2018, 22:12  [ТС] 7
Спасибо, поначалу это ввело меня просто в замешательство
Потом, я как-то уже начал догадываться, что, наверное, ассемблер по другому взаимодействует с массивами.
Оказалось что да, вы подтвердили мои догадки )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2018, 22:12

Bass.dll, bass_fx.dll - как сделать, чтобы менялась только высота звука без скорости?
Как сделать, чтобы при изменении частоты потока скорость оставалась той же, то есть, чтобы менялась...

Как сделать DLL
В универе нам дали задание сделать DLL, а как ее делать даже я не знаю и пример нам не давали.

Пытаюсь сделать динамическую загрузку dll. Dll-библиотека не подает признаков жизни
Здравствуйте. У меня такое дело, я пытаюсь создать в своей программе динамическую загрузку...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru