Вставити форму в dll, не показуючи її і не викликаючи

Вставити форму в dll, не показуючи її і не викликаючи

Доброго дня.
Відразу напишу, внизу дивився ( "А тут дивилися?"). В основному там виклик з головної програми, форми, яка захована в DLL.

Ситуація така: Є код DLL на Visual C ++. У нього потрібно вставити деякі мережеві взаємодії. Повністю програмувати на Visual C ++, не те що б не охота, просто все впирається у відсутність мережевих протоколів і громіздкістю програмного коду, який доведеться писати (якщо знайти структуру протоколу).
Тому вирішив конвертувати код під ВСВ. Запустив майстер на ВСВ і конвертувати код. Протестував готову DLL, все працює. Для вставки мережевих протоколів хочу використовувати INDY (є готові приклади реалізації).
Що б створити хоч один динамічний компонент INDY доводиться вставляти на форму такої ж один компонент. Ось і хочу в проект вставити форму і користуватися її властивостями. Показувати я її не буду, так що вона потрібна тільки для компонентів.

Сконвертовані код DLL такий:
dataserv.bpf:


Для вставки форми я створив чистий проект і зберіг його в папці App. Потім відкрив проект з DLL і вставив туди форму (з проекту App).
при збереженні проекту у мене вийшов файл dataserv.bpf ось таким:

довелося його поравівшейся на колишній і вставити новий рядок:

при компіляції проекту вискакувала помилка: [Linker Error] Unable to open file 'CONTROLS.RES'
я переменовал файл * .res з проекту App в CONTROLS.RES і після цього компіляція пройшла успішно.

Але як би я не намагався використовувати свойсва компонентів на формі, нічого у мене не виходить. Компіляція проходить успішно, а на момент виконання коду DLL все властивості не визначилися. Здогадуюся, що форму потрібно завантажити в пам'ять, але як. Отож, коли ти проект з програмою про це не замислюєшся, а тут як.
P.S. DLL-ку писав не я

Це Ви загнули. Ви зробили не так. Для початку Вам просто варто було взяти все один до одного, а далі приводити до свого варіанту. Але Ви ж крутий пронрамміст


Якраз я так і робив (всі скопіовал один в один). Я звичайно розумію, що вам важко було написати весь код, тому ви шматками зі своєї програми давали код або з пам'яті (тут я не телепат), але те, що я один в один зробив, як було написано - не запрацювало. Я спочатку подумав, що Хейдер потрібних немає, і почав порпатися в довідці, але після вставки потрібних, компілятор вперто не хотів розуміти catch (Exception excp) і подібні речі.

А якби Ви їх залишили, то Вам було повідомлено, що функція _SendUdp не знайдено.


Це самий останній мій варіант, який я тестував о другій годині ночі. Тому я не став його правити, а просто виклав сюди. До цього у мене там було написано SendUdp, який до речі теж не заробив.

Вибачте, але у мене виникає таке відчуття, що ні навіть намагаєтеся осмислити, що пишуть Вам і що Ви самі пишіть


Я б може і зрозумів, якби коментарии були, а так половина коду, для мене була темним лісом, хоч і намагався в ньому чесно розібратися.
для прикладу ось цей код:

Тобто, як я розумію, для створення TMyDataModule потрібен покажчик на форму, який використовується в функції. А якщо мені параметри потрібно передати.
А якщо у мене кілька функцій. Може для вас цей код дуже легкий, але для мене він абсолютно не прозорий і глянувши на нього через рік, я буду думати, а що я тут накуралесіл, а який тут алгоритм.

В результаті всього TMyDataModule для мене так і залишився загадкою, з якої я б хотів розібратися, і довелося робити простіші алгоритми (хоч і не такі ефективні), які я взяв з книжки.

Схожі статті