|
|
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
У меня есть tesk.Dll tesk.h tesk.Lib. полных исходников нет. Мне нужно написать новую Dll (обертку на старую), в которой добавятся несколько новых функций и изменяться несколько старых. Как сделать "проброс" функций из старой Dll в новую (лень все 200 вызовов переписывать) Я делаю следующее 1.Переименовую старую в tesk2.Dll tesk2.h tesk2.Lib. 2. Создаю новую пустую tesk.Dll Создал новые, изменил нужные Вопрос как "прокинуть" оставшиеся не изменяемых 200 штук? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 21:25 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
Александр ТретьяковЯ делаю следующее 1.Переименовую старую в tesk2.Dll tesk2.h tesk2.Lib.Переименовывать .h и .lib бессмысленно. Заголовку вообще до лампочки как называться. А библиотеке название файла тоже без разницы, но она хранит внутри себя старое имя dll. Александр Третьяков2. Создаю новую пустую tesk.Dll Создал новые, изменил нужные Вопрос как "прокинуть" оставшиеся не изменяемых 200 штук? Если ты делаешь новые функции, то хост тоже переписывается? А если он переписывается, то почему-бы не вынести новые и измененые функции в новую dll? Делать враппер над старой dll имеет смысл только только для замены функций и не чтоб не пересобирать хост. А вообще, чтобы сделать враппер я бы взял Перл и для каждой функции в заголовочном файле сделал бы функцию по следующему шаблону: Код: plaintext 1. 2. 3. 4. 5. 6. 7. А вот сделать статичную линковку одноименной функции по моему не получится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 21:51 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
а на скорости как оно скажется? за что люблю .NET, так за то что там нет схожих проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2006, 23:10 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
saintа на скорости как оно скажется? за что люблю .NET, так за то что там нет схожих проблем.Хреново оно скажется на скорости конечно. Лучше всего было бы пересобрать dll-ку, но если хочется извращений - можно и поизвращаться. А что, в .Net ты можешь решить аналогичную задачу более красиво? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 00:00 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
Александр ТретьяковКак сделать "проброс" функций из старой Dll в новую (лень все 200 вызовов переписывать) Придеца. Никуда ниденишся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 02:31 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
библиотеке название файла тоже без разницы, но она хранит внутри себя старое имя dll. То что она там хранит, мало кого волнует. Загрузчик ориентируется на имя файла. Есть такая штука как редирект. Это когда функция из одной библиотеки указывает на ф-ию из другой. При этом никакого кода писать вроде не надо, загрузчик сам разберётся. Только как редирект создавать х.з. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 12:28 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
to White Owl Я так тоже знаю :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. to a_s_d Только как редирект создавать х.з. Это как, тоесть я могу в новой Dll объявить dllexport функции из старой? Как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 12:40 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
>А что, в .Net ты можешь решить аналогичную задачу более красиво? :) А то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 14:12 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. Александр ТретьяковЭто как, тоесть я могу в новой Dll объявить dllexport функции из старой? Как это сделать?попробуй перед функцией написать обе __dllimport __dllexport ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 14:30 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
Как сделать не знаю. Сейчас с наскока не получилось. Есть пример редиректа. kernel32.dll экспортирует GetLastError. На месте, где должна быть функция находится такая надпись NTDLL.RtlGetLastWin32Error. Если в программе вызывать GetLastError, то вызывается RtlGetLastWin32Error из ntdll.dll. При загрузке проги загрузчик обрабатывает редиректы и записывает в таблицу импорта проги реальные адреса. Применительно к вашему случаю. Допустим есть оригинальная dll и в ней ф-ии f1,f2,f3. допустим вам надо изменить f2 и оставить нейзменными остальные. Вы переименовываете dll-ку(в old.dll), создаёте новую dll со старым именем и новой f2. А старые представляете в виде old.f1... Как это объяснить компилятору я понятия не представляю, но наверняка должны быть какието опции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 15:28 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
// переадресация к функции из DllWork #pragma comment(linker, "/export:SomeFunc=DllWork.SomeOtherFunc") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2006, 20:27 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
saint>А что, в .Net ты можешь решить аналогичную задачу более красиво? :) А то.а пример привести можешь? Александр Третьяков// переадресация к функции из DllWork #pragma comment(linker, "/export:SomeFunc=DllWork.SomeOtherFunc")Может и заработает, но это только не для всех компиляторов. Кстати, можно сделать и вполне универсально. В исходнике для новой dll пишешь: Код: plaintext 1. 2. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2006, 19:58 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
>а пример привести можешь? В .NET можно наследовать от любого обычного класса любой сборки. В данном случае я бы унаследовал от нужного класса и переписал/добавил нужные функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2006, 19:55 |
|
||
|
проброс функций Dll
|
|||
|---|---|---|---|
|
#18+
saint>а пример привести можешь? В .NET можно наследовать от любого обычного класса любой сборки. В данном случае я бы унаследовал от нужного класса и переписал/добавил нужные функции.Угу... то есть разницу между подменой внешних библиотек и наследованием не видим... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2006, 22:39 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33755919&tid=2031121]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 379ms |

| 0 / 0 |
