Autor Beitrag
F.Art
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Mi 22.12.04 15:24 
Ich habe hier ein VBScript

ausblenden Quelltext
1:
2:
Set Citrix = CreateObject("MetaFrameCOM.MetaFrameFarm")
MsgBox("MetaFrame Farm Name: " & Citrix.FarmName)


und dies möchte ich gerne in Delphi machen.
Wie wird das von Statten gehen?
Einige Beispiels Links wären auch toll.
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Mi 22.12.04 15:36 
Das sieht mir doch stark nach COM aus. Recht komplexes Thema! Über COM kann man Teile von anderen Programmen in seinem eigenen nutzen (bzw. Teile des eigenen Programms für andere zugänglich machen). Um das nun nutzen zu können, würde ich die zugehörige TLB importieren. Dazu in Delphi: Komponente -> ActiveX importieren. Da wählst du dann das Programm aus, zu dem diese Schnittstelle gehört und dann Unit anlegen. Dann bekommst du ne Unit in der die Interfaces deklariert sind und über die du dann auf diese Methode "FarmName" zugreifen kannst. Wenn du die Unit hast und nicht weiter weißt, kannst dich ja nochmal melden :)


MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: Mi 22.12.04 15:58 
Code
sollte eigentlich auch so gehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
   citrix : OLEVariant;
begin
   citrix := CreateOleObject('MetaFrameCOM.MetaFrameFarm');
   ShowMessage('MetaFrame Farm Name: ' + citrix.FarmName);



Nachteil: sog. späte Bindung, was etwas langsamer ist, als wenn du den Weg nimmst, den MrSaint vorgeschlagen hat. Weiterer Nachteil: Die Programmierhilfe wird dir nicht weiterhelfen, wenn du strg+leertaste drückst, da die Funktionsnamen nicht bekannt sind.

Links
delphi.about.com/od/comoleactivex/
www.informit.com/art...article.asp?p=130494
www.techvanguards.com/

Bücher
Delphi COM Programming, ISBN 1-57870-221-6
von Eric Harmon. Einer der Entwickler, die COM in Delphi integriert haben. Es wird auch am Anfang auf das Wort interface in Delphi selbst eingegangen, da es nicht zwangsläufig mit COM zu tun hat, sondern inzwischen zum Bestandteil von Delphi geworden ist und mit dme Dinge wie Mehrfachvererbungen möglich sind (stimmt nicht zu 100 Prozent, da es keine echte Mehrfachvererbung in Delphi gibt - zum Glück!)
Ist genial geschrieben, man merkt, dsas der Author ne Ahnung hat und er kann sie rüberbringen, auch wenn viele der Seiten nur mit Code-Listings voll sind.

COM/DCOM/COM +
von Andreas Kosch. Empfand ich eher als staubtrocken und schwer zu lesen und hab's dann auch irgendwann aufgegeben (nachdem endlich mein Delphi COM Programming da war *g*). ISBN hab ich dir gerade nicht zur hand, findet sich aber in Amazon...



gruß
rochus

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Mi 22.12.04 16:06 
rochus hat folgendes geschrieben:
COM/DCOM/COM +
von Andreas Kosch. Empfand ich eher als staubtrocken und schwer zu lesen und hab's dann auch irgendwann aufgegeben (nachdem endlich mein Delphi COM Programming da war *g*). ISBN hab ich dir gerade nicht zur hand, findet sich aber in Amazon...


ISBN: 3-935042-01-9

Ich find das Buch eigentlich recht gut, konnte gut draus lernen. Vorteil: deutsch und man kann leicht in Kontakt mit dem Autor treten, falls es z.B. Fragen etc. zu einem Beispiel im Buch gibt (-> Entwickler-Forum).



MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Mi 22.12.04 16:11 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var Citrix : Variant;
begin
Citrix := CreateOleObject(Edit1.Text);
ShowMessage('Text: ' + Citrix.FarmName);
end;


So habe ich den kleinen VBS Code in Delphi realisiert und es funktioniert so.
Leider kann ich keine TLB auswählen da ich kein Citrix auf dem PC habe wo mein Delphi drauf ist. Es liegt auf einem anderen Server.
Aber weitere Infos kann ich trotzdem gebrauchen, da ich noch keine erfahrungen mit COM habe.
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Mi 22.12.04 16:13 
Dann kannst du ja gar nicht testetn?!?!?

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Mi 22.12.04 16:18 
Hi,

grundsätzliche Tipps findest Du hier:

www.djpate.freeserve.co.uk/Automation.htm

dreht sich zwar viel um MS Office usw. Du findest dort allerdings auch einige Links.

Lemmy
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: Mi 22.12.04 16:18 
MrSaint hat folgendes geschrieben:
Dann kannst du ja gar nicht testetn?!?!?


solange die COM-Klasse im System registriert ist sollte das funktionieren.


//EDIT: wobei anzunehmen ist, dass dem nicht der fall ist. Einfach mal die Prozedur in ne button-click methode einbaun. kommt ne Fehlermeldung wie z.B. Ungültiger Klassenname oder so, fehlt dir der Eintrag.

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Mi 22.12.04 16:26 
rochus hat folgendes geschrieben:
MrSaint hat folgendes geschrieben:
Dann kannst du ja gar nicht testetn?!?!?


solange die COM-Klasse im System registriert ist sollte das funktionieren.


Aber wenn man das dann ausführt, muss irgendwo auf jeden Fall der Code sein, der ausgeführt werden soll. Da reichts dann nicht, wenn das ding nur registriert ist. Weiß nich, ob er dann nach dem Code irgendwo im Netzwerk automatisch sucht (kenn mich mit DCOM noch net so aus), aber der Code muss ja definitiv irgendwo sein. Und in der Registry is er bestimmt nich :lol:


MrSaint

EDIT Wegen DCOM: Dann muss halt wahrscheinlich in der Registry stehen, dass der Code auf nem anderen Rechner zu finden, is, der muss dann aber im Netzwerk sein.

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Mi 22.12.04 16:27 
rochus hat folgendes geschrieben:
MrSaint hat folgendes geschrieben:
Dann kannst du ja gar nicht testetn?!?!?


solange die COM-Klasse im System registriert ist sollte das funktionieren.


//EDIT: wobei anzunehmen ist, dass dem nicht der fall ist. Einfach mal die Prozedur in ne button-click methode einbaun. kommt ne Fehlermeldung wie z.B. Ungültiger Klassenname oder so, fehlt dir der Eintrag.



Ungültiger Klassenname kommt auf dem Rechner wo ich Code aber ich schiebe die exe immer auf den Server und teste es dort.
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: Mi 22.12.04 16:33 
MrSaint hat folgendes geschrieben:
Und in der Registry is er bestimmt nich :lol:


davon bin ich sicher nicht ausgegangen :roll:
wenn du die DLL per Hand nicht löscht, ist sie normal auch nicht verschwunden, wenn sie in der registry steht ;)

F.Art hat folgendes geschrieben:
Ungültiger Klassenname kommt auf dem Rechner wo ich Code aber ich schiebe die exe immer auf den Server und teste es dort.


Jopp, die Fehlermeldung mein ich :)


@DCOM: Bei DCOM braucht die server DLL nicht auf dem Client-rechner sein (logisch, oder? :) ).

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Mi 22.12.04 16:37 
Gibt es ne Möglichkeit es ordenlich auf dem Code Rechner zu machen ohne das ganze Citrix zu installieren?
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Mi 22.12.04 16:41 
Also n COM-Server muss nicht immmer in ner DLL sein! Irgendwie begegne ich diesem Irrglauben öfters :roll:

Zitat:

wenn du die DLL per Hand nicht löscht, ist sie normal auch nicht verschwunden, wenn sie in der registry steht

Dann war das programm aber mal installiert, wo soll sonst die DLL herkommen? Dann stellt sich die Frage warum man das Prog löschen sollte, wenn man noch damit testet (bzw. gern testen würde) ;) Und normalerweise entfernt sich ein Programm komplett (also auch alle DLLs und Einträge in der Registry), wenn man es deinstalliert ;) Aber die alleinige Registration in der Registry reiht nicht aus, ausßer es wird eben DCOM verwendet, und dann liegt der COM-Server, wie ja schon erwähnt auf ner fremden Maschine.. Die Frage die sich aber vorher bei mir aufgeworfen hat, ist: Wenn ich jetzt DCOM verwende in einem Programm, steht dann in der Registry der Rechner drin, auf dem sich der COM-Server befindet oder sucht windows da halt im Netzwerk nach nem passenden Rechner, auf dem der COM-Server installiert ist?

Aber das wird hier glaub alles bisschen zu viel off Topic ;) Aber noch ein kleines bisschen OT: Also mir wär das zu stressig die EXE da jedesmal rüberzuschieben ;)




MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems


Zuletzt bearbeitet von MrSaint am Mi 22.12.04 16:45, insgesamt 1-mal bearbeitet
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Mi 22.12.04 16:43 
F.Art hat folgendes geschrieben:
Gibt es ne Möglichkeit es ordenlich auf dem Code Rechner zu machen ohne das ganze Citrix zu installieren?


Ich fürchte nicht, weil du auf jeden Fall den COM-Server registriert bekommen musst (auch, wenn du es per DCOM lösen wollen würdest, sollte theoretisch ohne Probs funzen, nur musst du es eben registriert bekommen!). Wie das aber bei diesem Citrix genau funktioniert wirst du wohl nicht rausbekommen (also bei Delphi-programmen is es halt so, dass man die einfach mal starten muss, dann trägt sich alles von selber ein (bzw. wenn man nen InProc-Server hat, kann man den aus Delphi raus registrieren), aber das ist halt auch nur bei Delphi-prgos so..). Also um das Installieren wirst du nicht drumrumkommen, sag ich jetzt mal so ;)

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: Mi 22.12.04 16:51 
jetzt ist aber auch die frage, ob das überhaupt ein DCOM server ist (btw. niemand hat gesagt, dass nen COM Server lediglich in ner DLL liegen kann...), weil wenn nicht kann man es gleich vergessen, Citrix nicht zu installieren.

wenn doch, tut mir leid, weiß nicht wie man sich DCOM Server im System registriert. Gibt aber sicher auch nen Weg über RegSvr32.

gruß
rochus

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Mi 22.12.04 16:54 
Falls jemand wissen will was Citrix ist www.citrix.com/ dort findet man noch einige Infos.
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Mi 22.12.04 17:06 
rochus hat folgendes geschrieben:
btw. niemand hat gesagt, dass nen COM Server lediglich in ner DLL liegen kann...

rochus hat folgendes geschrieben:
wenn du die DLL per Hand nicht löscht, ist sie normal auch nicht verschwunden, wenn sie in der registry steht ;)
[...]
@DCOM: Bei DCOM braucht die server DLL nicht auf dem Client-rechner sein (logisch, oder? :) ).


rochus hat folgendes geschrieben:
jetzt ist aber auch die frage, ob das überhaupt ein DCOM server ist [...], weil wenn nicht kann man es gleich vergessen, Citrix nicht zu installieren.


Ich glaube zu wissen, dass man jeden "normalen" COM-Server auch problemlos als DCOM-Server benutzen kann (hab ich glaub gelesen).. Bin mir aber grad nicht sicher..
So, hab schnell nachgeschaut, also man muss da glaub nix beachten, beim Überfliegen hab ich nur festgestellt, dass es mit InProcess Servern über DCOM Probleme geben soll (klingt auch recht logisch *g*).. Also weiß da nix genaueres, bin jetzt auch zu faul das ganze kapitel durchzulesen nur deswegen ;) Am besten du installierst das Citrix einfach nommal auf dem Entwicklungsrechner, dann sollts auf keine Fall Probleme geben...



MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: Mi 22.12.04 17:44 
@mrsaint:
Die meisten DCOM Server werden in DLLs implementiert, daher meine Meinung. Nirgends steht, dass es nicht eine EXE sein könnte.
[offtopic]
dass deine persönlichen probleme mit mir in rechthaberisches getue ausarten war irgendwie absehbar... aber das geht jetzt zu weit Off Topic.
[/offtopic]

gru

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: So 26.12.04 18:24 
Muss mich korrigieren, hab es verdreht:

Zitat:
Out-of-process COM servers are implemented in an EXE, instead of in a DLL


sorry, mein Fehler, der ganze flame-war war umsonst :roll:

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean
F.Art Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 434



BeitragVerfasst: Mo 27.12.04 13:54 
Danke für die ganzen Links, habe angefangen diese zu lesen.

Habe ich das nun richtig verstanden, das man die Schnittstelle in das Delphi Projekt mit ein beziehen kann. Und somit der Dienst nicht mehr installiert sein muß um hinter dem Objekt die zusätzlichen Parameter angezeigt zu bekommen?