ДЛЛ и АцтивеКс контроле из Делпхи апликације

Популарна карактеристика Делпхи је пројектно активирање апликације са извршна датотека (еке). Међутим, ако ДЛЛ или АцтивеКс контроле у ​​вашем пројекту нису регистроване на машинама корисника, на екрану ће се приказати „ЕОлеСисЕррор“ као одговор на покретање еке датотеке. Да бисте то избегли, користите регсвр32.еке алатку наредбеног ретка.

РегСвр32.еке Цомманд

Ручно коришћење регсвр32.еке (Виндовс. Старт - Рун) ће регистровати и одјавити саморегистрирање ДЛЛ и АцтивеКс контрола на систему. Регсвр32.еке упућује систем да покуша да учита компоненту и назове своју функцију ДЛЛСелфРегистер. Ако је овај покушај успешан, Регсвр32.еке приказује дијалог који указује на успех.

РегСвр32.еке има следеће опције командне линије:

Регсвр32 [/ у] [/ с] [/ н] [/ и [: цмдлине]] име дллнаме. / с - Тихо; не приказује поља за поруке. / у - Одјавите сервер. / и - назовите ДллИнсталл дајући му опционално [цмдлине]; када се користи са / у позивима делл. / н - не зови ДллРегистерСервер; ова опција се мора користити са / и 
instagram viewer

Позовите РегСвр32.еке Унутар Делпхи кода

Да бисте позвали регсвр32 алат унутар Делпхи кода, користите функцију "РегистерОЦКС" да извршите датотеку и сачекате да се извршење заврши.

Овако би могао изгледати поступак 'РегистерОЦКС':

процедура РегистерОЦКС; тип
ТРегФунц = функција: ХРесулт; стдцалл; вар
АРегФунц: ТРегФунц; аХандле: ТХандле; оцкПатх: низ; започетипокушати
оцкПатх: = ЕктрацтФилеПатх (апликација. ЕкеНаме) + 'Фласх.оцк'; аХандле: = ЛоадЛибрари (ПЦхар (оцкПатх)); ако аХандле 0 ондазапочети
АРегФунц: = ГетПроцАддресс (аХандле, 'ДллРегистерСервер'); ако Додељено (АРегФунц) ондазапочети
ЕкецАндВаит ('регсвр32', '/ с' + оцк путања); крај; ФрееЛибрари (аХандле); крај; осим
СховМессаге (Формат ('Није могуће регистровати% с', [оцкПатх])); крај; крај;

Напомена: оцкПатх променљива указује на „Фласх.оцк“ Мацромедиа ОЦКС.

Да би се могао сам регистровати, ОЦКС мора имплементирати функцију ДллРегистерСервер за креирање уноса у регистре за све класе унутар контроле. Не брините за функцију ДллРегистерСервер, само се уверите да је ту. Ради једноставности, претпоставља се да се ОЦКС налази у истој фасцикли као и апликација.

Линија ЕкецАндВаит у горе наведеном коду позива регсвр32 алат преношењем "/ с" прекидача заједно с потпуном стазом до ОЦКС. Функција је ЕкецАндВаит.

користи схеллапи;... функција ЕкецАндВаит (цонст ЕкецутеФиле, ПарамСтринг: низ): боолеан; вар
СЕИнфо: ТСхеллЕкецутеИнфо; ЕкитЦоде: ДВОРД; започети
ФиллЦхар (СЕИнфо, СизеОф (СЕИнфо), 0); СЕИнфо.цбСизе: = СизеОф (ТСхеллЕкецутеИнфо); са СЕИнфо почињу
фМаск: = СЕЕ_МАСК_НОЦЛОСЕПРОЦЕСС; Внд: = апликација. Ручка; лпФиле: = ПЦхар (ЕкецутеФиле); лпПараметерс: = ПЦхар (ПарамСтринг); нСхов: = СВ_ХИДЕ; енд; ако СхеллЕкецутеЕк (@СЕИнфо) ондазапочетипонављање
Апликација. ПроцессМессагес; ГетЕкитЦодеПроцесс (СЕИнфо.хПроцесс, ЕкитЦоде); све док (ЕкитЦоде СТИЛЛ_АЦТИВЕ) или апликације. Прекинута; Резултат: = Тачно; крајдруго Резултат: = Нетачно; крај;

Функција ЕкецАндВаит користи СхеллЕкецутеЕк АПИ позив да изврши датотеку у систему. За више примера извршења било које датотеке из Делпхија, погледајте како извршавање и покретање апликација и датотека из Делпхи кода.

Фласх.оцк Инсиде Делпхи Еке

Ако постоји потреба да региструјете АцтивеКс контролу на рачунару корисника, проверите да ли корисник има ОЦКС који програм захтева постављањем целокупног АцтивеКс-а (или ДЛЛ-а) унутар еге апликације као ресурс. Кад се ОЦКС похрани у еке, лако га је извадити, спремити на диск и позвати поступак РегистерОЦКС.