Search  
Thursday, May 24, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  COM, DCOM si OLE Automation  Referinta catre...
 Referinta catre un EXE COM din interiorul sau
 
 8/17/2005 5:49:37 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Referinta catre un EXE COM din interiorul sau
 (Romania) Modified By Grigore Dolghin  on 8/17/2005 5:50:17 PM)

Salut, sper din toata inima sa fiu suficient de explicit.

Am facut un server COM, build as EXE. Definitia e mai jos:

Define Class TestClass As Session OlePublic

	Grigore = 0
	Dimension Grigore_ComAttrib[4]
	Grigore_ComAttrib[2] = "Grigore. Test."
	Grigore_ComAttrib[3] = "Grigore"
	Grigore_ComAttrib[4] = "Integer"
	
	Procedure Init
	Do mainmenu.mpr
	_Screen.Visible = .T.
	Endproc

	Procedure Destroy
	Endproc

	Procedure Error(nError, cMethod, nLine)
	Endproc

	Procedure Grigore_Assign
	Lparameters vNewVal
	? vNewVal
	This.Grigore = vNewVal
	Endproc

Enddefine

Bun. Iata care este problema: exe-ul asta functioneaza perfect daca este instatiat din Command Window si accesat de acolo:

X = CreateObject("TestProj.TestClass")
X.Grigore = 3
? X.Grigore returneaza 3. De asemenea, in aplicatia instatiata apare scrisa valoarea (percuteaza assign-ul). Pana aici toate bune.

Fiind .EXE, userul poate interactiona cu aplicatia. Am nevoie sa citesc niste valori introduse de user. Ca test, am adaugat un meniu in COM-ul ala, care are un singur pad. In pad-ul meu se gaseste urmatoarea comanda: TestClass.Grigore = 5. Ma asteptam sa se atribuie valoarea in proprietatea publica, sa percuteze assignul si sa obtin valoarea pe ecran si in proprietate, ca sa o pot citi din Command Window. Aiurea. "testclass is not found". Dau display memory - 0 variables defined.

Intrebare: Cum naiba apelez clasa publica din interiorul COM-ului instantiat?

_VFP.Grigore - crapa.
TestClass.Grigore - crapa.
TestProj.Grigore - crapa.
TestProj.TestClass.Grigore crapa si asta.

Ce sa scriu frate acolo, ca m-a disperat deja?

Atasez proiectul. Trebuie compilat ca Win32 Executable / COM  Server (exe), ca sa se inregistreze in sistem.


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 8/17/2005 7:33:14 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Referinta catre un EXE COM din interiorul sau
 (Romania)

Ok, am rezolvat problema, nu va rupeti creierele cu asta. Acum e tarziu si trebuie sa plec acasa, dar o sa povestesc maine ce si cum. E interesant de stiut :)


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 8/22/2005 11:06:45 AM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Referinta catre un EXE COM din interiorul sau
 (N/A) Modified By LAU  on 8/22/2005 11:10:27 AM)
Va salut domnule Grigore

Nu are legatura cu problema dumneavoastra mai ales ca ati si rezolvat-o, dar vad ca sunteti specialist in ale programarii si va pun si eu o interbare : am o procedura pentru o casa de marcat Optimus care ruleaza sub DOS. Dupa ce apelez din fox programul cu comanda 'Run MAIN.EXE 0', trebuie sa introduc doua valori de al tastatura si anume '1' pentru legatura cu casa si 'q' pentru inchidera operatiei dupa care iese bonul la casa. Nu exista oare o solutie ca sa nu mai introduc de fiecare data aceste doua valori din moment ce eu numai pe astea le folosesc ? Si ca sa fie si mai enervant pentru a reveni la procedura apelanta trebuie sa mai tastez o tasta pentru iesirea din programul 'MAIN.EXE'

Multumesc
 8/22/2005 11:27:03 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Referinta catre un EXE COM din interiorul sau
 (Romania)
N-am inteles. Fa un thread nou, in categoria corespunzatoare, si explica mai pe larg ce doresti sa faci (da mai multe amanunte).
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 8/22/2005 2:39:09 PM
User is offlineanonymous
0 posts


Re: Referinta catre un EXE COM din interiorul sau
 (Romania)
Pune una-alta in buffer-ul de tastatura cu functia KEYBOARD() .
hth
 8/22/2005 2:45:43 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Referinta catre un EXE COM din interiorul sau
 (Romania)
Sau Do Main 01q si faci parsing pe parametru; da' daca nu stiu daca ai sursele, poti sa recompilezi, etc, etc, eu ce pot sa zic? :)
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 9/17/2005 3:34:34 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Referinta catre un EXE COM din interiorul sau
 (Romania)
Foarte interesant acest test. Cel putin treaba aia cu  _Screen.Visible = .T., n-am stiut ca este posibila.
Am testat proiectul cu VFP6 si a trebuit sa refac meniul, probabil din motive de versiune, dar rezultatul a fost la fel ca al tau. Acum, da-ne si solutia, sa nu ne mai chinuim s-o aflam singuri.





 9/18/2005 10:52:24 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Referinta catre un EXE COM din interiorul sau
 (Romania)

Nu stiu cum, dar am reusit sa nu includ si forum-ul asta in subscribtions, asa ca n-am primit mail-ul cu mesajul tau, si din cauza asta n-am stiut ca ai scris ceva. Sorry.

O sa scriu un articol detaliat pe tema asta, dar acum, quick'n'dirty, uite care-i treaba: ce voiam eu nu se poate. Solutia este sa adaugi o referinta catre clasa OlePublic intr-un "ceva" care este vizibil non-stop. Ca atare: in DEFINE CLASS, in Init(), introdu urmatoarea linie: _Screen.AddProperty("goApp",This), si in meniu: _Screen.goApp.Grigore = 3. Acuma o sa mearga "as expected". Cu alte cuvinte, codul din interiorul COM-ului continua sa nu vada clasa OlePublic, da' acuma aia e agatata in _Screen, si codul o apeleaza de-acolo.

Mai sunt niste lucruri nashpa in lucrul cu COM. De exemplu, IMPLEMENTS. Poti sa iti definesti o clasa care sa implementeze toate evenimentele care apar intr-un ActiveX, adica ori de cate ori se executa un eveniment intr-un activex, se apeleaza automat codul dintr-o metoda pe care o definesti intr-o clasa absolut independenta de ActiveX-ul ala (de cele mai multe ori, scrii codul tau direct in evenimentul din ActiveX (NodeClick in TreeView). Ei bine, se poate sa-ti faci o clasa separata, sa "legi" metoda ta de un anumit eveniment, si sa scrii codul in ea. Este utila cand nu poti sa scrii codul direct in ActiveX. Un exemplu ar fi WordApplication.Documents.Add().

Fooaaaarrrrtteee frumos. Bineinteles ca nu merge sa faci aceeasi manevra daca serverul COM este scris in VFP. Nu ma intreba de ce, ca habar n-am. Oricum, e stupid. Mecanismul este exact acelasi, dar uite ca nu se poate. Se poate facand o gramada de improvizatii (Calvin Hsia, de la M$, are un blog in care scrie cum. Oricum, dupa parerea mea sunt improvizatii: se defineste inca o clasa care are ca metode numai evenimentele din serverul COM, apoi se leaga una de alta cu EventHandler(), in fine, numai stupizenii. Si toate astea pentru ca niste baieti destepti nu s-au putut decide cum sa faca implementarea aia.)


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 9/18/2005 12:36:03 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Referinta catre un EXE COM din interiorul sau
 (Romania)
Multumesc de informatii. Mai demult m-am apucat de lucru la niste com-uri, dar din cauza unor ciudatenii de genul asata am renuntat. O sa reiau treaba, dar astept sa-mi vina si upgrade-ul la VFP9, ca parca s-au mai limpezit anumite probleme.

  Visual FoxPro  COM, DCOM si OLE Automation  Referinta catre...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement