|
|
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
Подскажите, как вызвать функцию exe из dll ? В ехе загружаю dll, все норм, но иногда необходимо, чтобы dll вызывала функцию ехе с параметрами Я так понимаю, что для этого необходимо передавать функцию ехе в длл в виде параметра? Или можно как-то по-другому? Если нельзя, то как правильно передать фцию в качестве параметра? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2019, 16:38 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
Читай что такое callback и с чем его едят. А лучше - забудь про DLL, это чаще всего совершенно ни к чему. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2019, 17:22 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
antox, см. "процедурные типы". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2019, 17:50 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
antox, https://docs.microsoft.com/en-us/windows/desktop/api/libloaderapi/nf-libloaderapi-loadlibraryexa + DONT_RESOLVE_DLL_REFERENCES Например. Еще есть интерфейсы, процедурные типы. Можно в dll объект передать, а внутри длл обращаться к методу объекта. Или сразу процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2019, 17:53 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
Правильное решение - спроектировать архитектуру так, чтобы у dll не было необходимости обращаться к функциям из exe ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2019, 17:55 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
antox Я так понимаю, что для этого необходимо передавать функцию ехе в длл в виде параметра? Или можно как-то по-другому? Еще EXE может экпортировать функцию, а DLL, в свою очередь, импортировать через GetProcAddress ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2019, 18:07 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Вот все говорят dll не применять, но как тогда реализовать, общие файлы для нескольких программ? Но так что-нибудь переделаешь, а через несколько месяцев не поймёшь, почему другая программа (где это не было учтено) перестала работать... Кто-то рекомендует использовать bpl, но детально непонятен алгоритм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 02:18 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
antox, Зачем тебе "общие файлы для нескольких программ"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 02:21 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
В них общие формы, процедуры и ф-ции, общие классы. Если в каждую включать копии, то потом задолбаешься во все вносить правки, в ТЧ связанные с новым функционалом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 03:28 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
antox, Зачем тебе общий DLL, если можно в разных проектах использовать общие юниты? Даже самый плохой случай, когда надо изменить функцию в DLL - так или иначе везде эту DLL обновлять. Во всех проектах что её функции используют. Так какая по большому счету разница будет это DLL или сами EXE-шники проектов? А вот гемороя в разработке значительно меньше. Хотя всякие нюансы могут быть. Типа проектов которые вы ведете в очень разных версиях среды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 03:34 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
rgreat, Согласен на общие unit-ы ) Кто организационно выстраивать работу? Что бы потом случайно не сломать из одной программы работу другой? Просто не всегда помнишь, где ещё это используется и ХЗ, как это отслеживать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 03:40 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
antoxКто организационно выстраивать работу? Что бы потом случайно не сломать из одной программы работу другой? Просто не всегда помнишь, где ещё это используется и ХЗ, как это отслеживатьНе помнишь - записывай. ;) И тестируй все что связано с изменениями перед релизом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 04:04 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
Еще можно при любом изменении общей функции менять его название. Так по любому придеться править связаные проекты, ибо компитятор пропустить по забывчивости не даст. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 04:07 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
Менять название этой функции в смысле. :) Или добавлять новую, с измененным функционалом, не меняя старую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 04:18 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
А как версии отслеживать? Просто писать вначале основного unit-а и только его делать общим, а остальные уже только доступные для него? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 04:35 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
antoxА как версии отслеживать? Просто писать вначале основного unit-а и только его делать общим, а остальные уже только доступные для него? Версии чего? unit MyCommonFunctions function MyFunctionXXX_v1(params); function MyFunctionXXX_v2(params); function MyFunctionXXX_v3(params); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 05:27 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
можно еще добавить: const MyCommonFunctionsUnitVersion = XXX; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 05:34 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
antoxКто организационно выстраивать работу? Что бы потом случайно не сломать из одной программы работу другой? Работу другой программы ты не сломаешь если каждый отдельный модуль будет работать так как задумано. Для того, чтобы это гарантировать, есть юнит-тесты. В Дельфи вроде бы уже появились workspace, то есть можно открыть сразу несколько проектов и компилировать их пачкой. Так ты гарантируешь, что изменения в модуле не сломают компиляцию другого приложения. Ну и система контроля версий это must have по-любому. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2019, 12:38 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
Ладно, пока все норм. Хочу подключать к программам модуль 1 (unit1), в котором есть ф-ции для вызова их из программ, уже этот модуль вызывает ф-ции основного unit2. ф-ции из unit2 недоступны другим модулям, а доступны только unit1 (uses unit2, во всех остальных только uses1). Проблема в том, что типы описаны в unit2, как можно не описывая их заново в unit1 и не подключая ко всем модулям кроме unit1 еще и unit2 использовать переменные типов, указанных в unit2 в других модулях? Можно делать так, как показано ниже? Или есть другие решения или лучше вообще избегать такого? unit2 Код: pascal 1. 2. 3. 4. 5. unit1 Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2019, 04:58 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
antox, Ты хочешь странного и странными путями. В чем смысл объединения всего функционала в 1 юнит? Что мешает юзать необходимые юниты напрямую без этого странного концентратора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2019, 05:31 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
rgreat, unit2 - будет несколько, они будут содержать разные ф-ции в зависимости от сторонних библиотек unit1 - будет один со стандартными функциями и будет выполнять разные ф-ции из unit-ов типа unit2 Хочу, что бы мои программы работали одинаково со всеми сторонними библиотеками ч-з единый unit1 и ничего не знали о различиях в unit-ах типа unit2 (которые будут разные) т.е. в unit1 будет: Код: pascal 1. 2. 3. 4. 5. 6. Соответственно хочу в программах только писать: getProc(mr.i), но TMyRec не описан в unit1, он описан в unit2a и т.д. Или в этом случае надо общие unit-ы с объявлением всех общих типов? Или вообще типы описать в unit1, а в unit2х - только уникальные специфические функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2019, 06:14 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
Я не знаю нюансов потому советов не дам. Подумай стоят ли затраты выгоды и делай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2019, 06:22 |
|
||
|
Exe + DLL
|
|||
|---|---|---|---|
|
#18+
antoxrgreat, unit2 - будет несколько, они будут содержать разные ф-ции в зависимости от сторонних библиотек unit1 - будет один со стандартными функциями и будет выполнять разные ф-ции из unit-ов типа unit2 Хочу, что бы мои программы работали одинаково со всеми сторонними библиотеками ч-з единый unit1 и ничего не знали о различиях в unit-ах типа unit2 (которые будут разные) Вам нужно не с юнитами заморачиваться, а использовать ООП, т.е. вместо unit1 создайте базовый класс, а вместо нескольких unit2 - наследников этого класса. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В самой программе используйте базовый класс: procedure MyProc(X:TUnit1Base) потом передавайте туда потомков: MyProc(TUnit2.Create); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2019, 08:39 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39826850&tid=2039367]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
158ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 477ms |

| 0 / 0 |
