[ Pera Pisar @ 04.09.2007. 23:07 ] @
Pokusavam da iz javascripta ili vbscripta pozovem funkciju activex komponente koja se nalazi na klijentskom racunaru.
Napravio sam u Visual C++ 2005 jednu jednostavnu activeX komponentu (ocx fajl) i exportovao jednu jedinu funkciju koja vraca int vrednost. Kada pokusam da pozovem tu funkciju iz VB-a, sve radi kako treba, tj. dobijam broj koji funkcija treba da vrati.

Registrovao sam activex komponentu na klijentskoj masini pomocu regsvr32. Na dva nacina sam pokusavao da iz javascripta pozovem funkciju
- pomocu new ActiveXObject("progID") gde sam progID nasao u registriju
- pomocu <object classid="clsid:xxxxxxx" id="xx">, a classid sam isto nasao u registriju

Javascript uspe da napravi objekat, ali ne moze da pozove funkciju tog activex-a. Na web stranici se javlja greska "Object doesn't support this property or method".

U opcijama Internet explorera sam omogucio rad sa svim vrstama activex objekata i u Internet i u intranet zoni.

Svuda sam trazio neko resenje, ali nisam uspeo. Vrtim se oko dve linije koda vec nedelju dana. Saljem i kod html stranice sa javascriptom. Hvala puno na bilo kakvoj pomoci.

<HTML>
<HEAD>
<OBJECT classid="A2733628-A334-4207-83F1-F00198758EFF" id="a"></OBJECT>
<TITLE></TITLE>
<script type='text/javascript' language='javascript'>
function callTest()
{
//prvi nacin
try{ //prvi nacin
var myobject;
myobject = new ActiveXObject("OCXTEST.ocxtestCtrl.1");
alert(myobject.test()); // funkcija activex-a se zove test
}
catch(e)
{
alert(e.message);
}
//drugi nacin
try{
alert(a.test());
}
catch(e)
{
alert(e.message);
}
}
</SCRIPT>
</HEAD>
<BODY>
<INPUT TYPE="button" value="TEST" onClick="callTest()">
</BODY>
</HTML>
[ noviKorisnik @ 05.09.2007. 09:36 ] @
alert (myobject);//da proveriš da li je objekt kreiran valjano, treba da vrati "[Object]" (valjda :-)
alert (myobject.test);//da proveriš da li je vidljiva funkcija, ako je ok vraća "[Function]"

Konkretnije ne mogu pomoći, ovo je samo mali hint za proveru (nisam se nikad igrao s ActiveX, verovatno i neću). Interesuje me šta dobijaš u alertima pri pozivu koda koji si ostavio.
[ Pera Pisar @ 05.09.2007. 10:17 ] @
U prvom alertu - alert(myobject); vraca [object],
a u drugom - alert (myobject.test); ne vrati [function], nego 'undefined'.

Kada stavim alert(myobject.test()); vraca gresku 'Object doesn't support this property or method'.

Jos jednom da kazem da je funkcija test exportovana i da se vidi iz npr. Visual Basica.
[ noviKorisnik @ 05.09.2007. 10:55 ] @
Code:
<textarea id="area" cols="72" rows="24"></textarea>
<script>
function inspectObj (obj) {
    if (typeof (obj) != 'object') return alert ('Error: object is expected');
    var out = '';
    for (var i in obj) out += i + ' : ' + obj [i] + '\n\n';
    document.getElementById ('area').value = out;
}
</script>

Ovo bi mogla da bude korisna funkcija da vidiš šta ima u samom objektu. Dodaš ovaj kod i pogledaj šta dobijaš u textarea pri pozivu inspectObj (myobject);
[ Pera Pisar @ 06.09.2007. 10:56 ] @
Hvala puno na odgovorima.

Pri pozivu inspectObj (myobject); ne ispise bas nista. Prazan text field. Probao sam i sa alertom, ali isto je prazan.
[ Pera Pisar @ 07.09.2007. 14:02 ] @
Resio sam problem!!!

Problem uopste nije bio u javascript-u nego u samom ocx fajlu, kao sto sam kasnije i pretpostavio. Naime, ne mogu da se u ActiveX kontroli eksportuju fajlovi kao sto sam ih ja eksportovao u klasicnom dll-u (Win32 project). Tada sam ih eksportovao u .def fajlu ili pomocu __declspec(dllexport).

U MFC ActiveX Control projektu, metode postaju vidljive za aplikacije koje ce ih koristiti upotrebom dispatch map-a. Najbolje je sve takve metode dodati pomocu wizarda i onda ih Visual Studio u razlicitim fajlovima deklarise kao metode koje se exportuju.