Идеја чланка Марка Е. Мосс
У чланку о томе како похранити ДЛЛ унутар еке датотеке програма Делпхи као ресурса објашњава како испоручити ДЛЛ са извршном датотеком Делпхи апликације као ресурсом.
Динамичке библиотеке веза садрже размењиви код или ресурсе, они пружају могућност да више апликација дели заједничку копију рутине (или ресурса) коју имају заједничко.
Користећи датотеке (.РЕС), можете да уграђујете (и користите) звучне датотеке, видео снимке, анимације и уопште било које врсте бинарних датотека у извршном Делпхију.
Учитавање ДЛЛ датотека из меморије
ако се ДЛЛ сачуван у РЕС-у може користити без претходног спремања на датотечни систем (тврди диск)
Према члану Учитавање ДЛЛ-а из меморије Јоацхим Бауцх, ово је могуће.
Ево како Јоацхим гледа на проблем: Задане Виндовс АПИ функције за учитавање екстерних библиотека у програм (ЛоадЛибрари, ЛоадЛибрариЕк) раде само са датотекама у датотечном систему. Стога је немогуће учитати ДЛЛ из меморије. Али понекад вам је потребна тачно ова функција (нпр. Не желите да дистрибуирате пуно датотека или желите да отежате растављање). Најчешћа решења за ове проблеме су да прво запишете ДЛЛ у привремену датотеку и увозите је одатле. Када се програм прекине, привремена датотека се брише.
Код у наведеном чланку је Ц ++, сљедећи корак је био да га претворите у Делпхи. Срећом, то је већ учинио Мартин Оффенвангер (аутор књиге ДСПлаиер).
Меморијски модул Мартин Оффенвангер је проширена верзија Делпхија (и такође Лазарус) компатибилна са Ц ++ Јоацхима Бауцха Меморијски модул 0.0.1. Пакет зип укључује комплетни Делпхи изворни код МемоиМодуле (БТМемориМодуле.пас). Поред тога, укључени су Делпхи и узорак који демонстрирају како га користити.
Учитавање ДЛЛ датотека из ресурса из меморије
Ако је демо ДЛЛ сачуван као ресурс помоћу РЦ датотеке:
ДемоДЛЛ РЦДАТА ДемоДЛЛ.длл
вар
мс: ТМемориСтреам;
рс: ТРесоурцеСтреам;
започети
ако 0 <> ФиндРесоурце (хИнстанце, 'ДемоДЛЛ', РТ_РЦДАТА) онда
започети
рс: = ТРесоурцеСтреам. Креирајте (хИнстанце, 'ДемоДЛЛ', РТ_РЦДАТА);
мс: = ТМемориСтреам. Креирај;
покушати
Госпођа. ЛоадФромСтреам (рс);
Госпођа. Позиција: = 0;
м_ДллДатаСизе: = мс. Величина;
мп_ДллДата: = ГетМемори (м_ДллДатаСизе);
Госпођа. Реад (мп_ДллДата ^, м_ДллДатаСизе);
напокон
Госпођа. Бесплатно;
рс. Бесплатно;
крај;
крај;
крај;
вар
бтММ: ПБТМемориМодуле;
започети
бтММ: = БТМемориЛоадЛибари (мп_ДллДата, м_ДллДатаСизе);
покушати
ако је бтММ = нулаонда Прекид;
@м_ТестЦаллстд: = БТМемориГетПроцАддресс (бтММ, 'ТестЦаллстд');
ако је @м_ТестЦаллстд = нил, онда одустани;
м_ТестЦаллстд ('Ово је позив за меморију Длл!');
осим
Сховмессаге ('Дошло је до грешке приликом учитавања длл:' + БТМемориГетЛастЕррор);
крај;
ако Додељено (бтММ) онда БТМемориФрееЛибрари (бтММ);
крај;
- Имати / креирати ДЛЛ
- Складиштите ДЛЛ у РЕС датотеку
- имати Имплементација БТМемориМодула.
- Узмите ДЛЛ из ресурса и учитајте га директно у меморију.
- Користите БТМемориМодуле методе да бисте извршили процедуру из ДЛЛ-а у меморији.
БТМемориЛоадЛибари у Делпхију 2009, 2010,...
Нашао сам сличну верзију датотеке БТМемориМодуле.пас пре извесног времена и извршио промене тако да функционише са (бар) Делпхијем 2006, 2007 и 2009. Моја ажурирана БТМемориМодуле.пас и пример пројекта су у БТМемориЛоадЛибари за Делпхи> = 2009"