ActiveX DLL + Web page + Javascript + Show Modal

5 отговора 125 прегледа
#1

ActiveX DLL + Web page + Javascript + Show Modal

Историята е такава:

Имам web page, в него имам javascript, който вика ActiveX DLL, който трябва да покаже (Show) една форма. До тук добре. Използвам следните кодове:

в web page с javascript:
<SCRIPT LANGUAGE="JavaScript">

<!--
baba = new ActiveXObject("baba.iliica");
baba.showme();
//-->
</SCRIPT>
в кода на ActiveX обекта във VB6:
Public Function showme()

Form1.Show
End Function


До тук всичко е прекрасно и трябва да работи, като изключим една подробност- формата не се показва, а описанието на грешката, която връша DLL файла към JavaScript виртуалната машина е, че не може да се покаже формата, ако тя не е модална.

И в това няма нищо лошо... модална я правим като напишем Show 1, owner... Ето тук обаче възниква проблемът- как да прихвана инстанцията (прозореца) на Microsoft Internet Explorer , която вика DLL файла, така че да я предам като Owner!

Хората все казват, че май не са го обяснили достатъчно ясно и затова не очакват отговор, а аз мисля, че го обясних пределно ясно... та с две думи очаквам отговор :)

БАба...


Ама баба не е жена, вие не знаете ли?
Отговор
в отговор на БaбaИлиицa #2

Re: ActiveX DLL + Web page + Javascript + Show Modal

Мисля че не ти трябва да казваш Owner... Със

Form1.Show vbModal

трябва да си работи без проблем.

Епа, това е моето хоби... [линк]
Отговор
в отговор на fiffy #3

Ей, работи... айде още малко support?

Бре.... бре-бре-бре...

То даже работи! Всъщност ставало и с Form1.Show 1 ама кой да се сети?

Мерси много...

И така и така съм станал досаден да допопитам още нещо: има ли възможност и ако има, къде да я търся, при регистрирането на DLL файла да се допишат ключове в registry, а при отрегистриране, същите да се изтрият? Или изобщо да се изпълни някакъв код при регистриране и някакъв при отрегистриране. Иначе ясно, вътре си има код, който регистрира DLL файла и неговите класове като object.class и като CLSID в registry... даже ако не се лъжа, то не е програма, а само информация за CLSID, а RegSRV32 се грижи за останалото. И в тоя смисъл, мога ли да задам конкретно CLSID за регистрацията на DLLто?

Взех да ставам много досаден, нали?

БАба...


Ама баба не е жена, вие не знаете ли?
Отговор
в отговор на БaбaИлиицa #4

Re: Ей, работи... айде още малко support?

Честно казано незная дали можеш да си сложиш код който да се изпълни при регистрация на dll. Бих очаквал да можеш да го направиш с някакви големи гимнастики, но никога не съм виждал някой да го прави (да не говорим аз да съм опитвал :)))

Инъче CLSID-то на ActiveX ти ще бъде това което е на твоя компютър и трябва да има начин да го промениш (ама не зная как :)))). Все пак, със сигурност това което виждаш като CLSID при теб ще бъде същото на всяка машина на която си инсталираш контрола... Ако се питаш какво ще стане ако вече има контрол с това CLSID, ами идеята е че то е толкова дълго и има толкова много вариации ще на практика е невъзможно да бъдат генерирани 2 еднакви стойности (независимо че всеки ден се генерирарат хиляди нови :))).

И още нещо, ако разчиташ на конкретно CLSID (примерно го слагаш в HTML страници), увери се че си избрал правилната Compatibility настройка в Project Properties...

Епа, това е моето хоби... [линк]
Отговор
в отговор на fiffy #5

ам, трябва да може, ще търся още!

Ми и за двете съм сигурен, че са възможни... За първото просто съм виждал DLL, който след като го регистрираш ти стартира MSIE и ти отваря сайта на автора, освен това дописваше в registry още ключове (освен регистрацията на класовете). Става дума за extension за MSIE и просто освен регистрацията трябваше да си допише и ключовете, които са необходими, за да може да се вижда extension-а в менютата на MSIE. Само не знам въпросното DLL дали е писано на VB или на друг език. Може и в това да е причината!

Относно второто- промяната на CLSID. Би било идиотизън ако не е възможно, защото имам стара версия на едно DLL, която вече си има CLSID, но е писана на друг език. Всъщност е писано на Delphi, и съдържа JavaScript като ресурсен файл. Сега искам да го напиша на VB, защото компилираният код очевидно върви по-бързо. Обаче искам новото DLL да използва стария CLSID (версията ще е по-висока естествено)...

Мерси все пак за помощта... ще търся още в google- той обикновено знае!

БАба...


Ама баба не е жена, вие не знаете ли?
Отговор
в отговор на БaбaИлиицa #6

Re: ам, трябва да може, ще търся още!

Виж DLLRegisterServer и DLLUnregisterServer. Тези 2 функции се използват за регистриране и отрегистриране на COM обекти.

Като извикаш regsvr32.exe file.dll се изпълнява DLLRegisterServer entry-point-а в file.dll, ако има такъв разбира се. Обратно, при regsvr32 /u - DLLUnregisterServer


_ _ _

Time is like a drug. Too much of it kills you.
Отговор