AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu OleVariant

Ein Thema von MathiasSimmack · begonnen am 5. Mai 2004 · letzter Beitrag vom 6. Mai 2004
Antwort Antwort
Seite 1 von 2  1 2      
MathiasSimmack
(Gast)

n/a Beiträge
 
#1

Frage zu OleVariant

  Alt 5. Mai 2004, 19:47
Kurze Frage, weil ich nicht wirklich Ahnung von diesem ganzen Interface-Kram habe.
Ich arbeite gerade mit einem komplett undokumentierten API.

Ich weiß, dass ich bestimmte Eigenschaften auslesen kann, allerdings liefert die Funktion laut Typbibliothek einen OleVariant zurück:
function GetProperty(propid: HxRegNamespacePropId): OleVariant; safecall; Um diese Funktion nutzen zu können zu können, habe ich also "propId" entsprechend als OleVariant deklariert und dann aufgerufen. Der Konstante in Klammern bezeichnet das eigentliche Objekt, auf das ich es abgesehen habe:
propId := namespace.GetProperty(HxRegNamespacePlugInList); Dieses Objekt ist allerdings vom Typ "IHxRegPlugInList". Wie komme ich jetzt von meinem OleVariant an dieses Ding heran?
Gibt´s so was wie Type-casting?

Danke.


PS: Der Sinn ist, dass ich versuche, mir einen Viewer zu schreiben, der mir die im System bekannten Help 2.0-Namespaces anzeigt. Das ist nicht das Problem. Mein Tree-View listet die schon auf und zeigt auch die bekannten Filter an. Per Klick auf auf das Root-Item (= der Namespace) startet auch die entsprechende Hilfe (das PSDK bspw.).
Jetzt versuche ich eben noch die Plugins und die zugeordneten Hilfedateien auszulesen. Und das geht nur mit der o.g. Methode. Und da hänge ich an dem OleVariant.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Frage zu OleVariant

  Alt 5. Mai 2004, 19:58
Hallo Matthias,
wenn ich ich recht entsinne kannst Du direkt mit propID weitermachen.
Wenn z.B. das Interface eine Methode mit dem Namen 'Open' anbietet
kannst Du
Code:
prodID.Open
in Deinen Source schreiben. Delphi "schaltet" hier völlig transparent zum Late Binding um.

Natürlich werden Dir die möglichen Methoden usw nicht angezeigt.
Der Compiler kann auch keine Typprüfung vornehmen. D.h. Fehler
fallen erst zur Laufzeit auf. Meistens kommt dann der Fehler:
Schnittstelle nicht unterstüzt.

Hinweis:
Wenn man mit den Office-Serverkomponenten arbeitet wird die
Frühe Bindung verwendet. D.h. man muss alle Parameter der Methode angeben.
Das muss bei der Späten Bindung nicht unbedingt sein. MS hat eigentlich immer
für die Parameter einen Defaultwert vorgesehen. D.h. wenn man keinen Bock hat
die 12 oder mehr Parameter der WordApplication.Open Methode einzugeben
könnte man auch
Code:
OleVariant(WordApplication).Open(Filename)
auch hier wird temporär die Späte Bindung verwendet.

Ich hoffe meine Erinnerung hat mir keinen Streich gespielt
I come from outer space to save the human race
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: Frage zu OleVariant

  Alt 5. Mai 2004, 21:29
Das mit dem "direkten Weitermachen" hatte ich schon versucht, Jens. Aber da beschwert sich der Compiler
Delphi-Quellcode:
// [Fehler] Unit1.pas(120): Inkompatible Typen: 'Variant' und 'IEnumHxRegPlugIn'
pluginEnum := propId.EnumRegPlugIn(0,0);
Und die Variablen:
Delphi-Quellcode:
var
  propId : OleVariant;
  pluginEnum : IEnumHxRegPlugIn;
Seltsam ist, dass bspw.
ShowMessage(inttostr(propId.Count)); funktioniert, denn "Count" ist auch eine Methode von "IHxRegPlugInList", genau wie "EnumRegPlugIn".
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Frage zu OleVariant

  Alt 5. Mai 2004, 23:14
Hab nen ähnlichen Fall und da funktioniert das so:
Delphi-Quellcode:
var
  propId : OleVariant;
  pluginEnum : IEnumHxRegPlugIn;

pluginEnum := IUnknown(propID) as IEnumHxRegPlugIn;
Manuel Pöter
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: Frage zu OleVariant

  Alt 6. Mai 2004, 07:49
Motzi, der Tipp war Gold wert.
Jetzt sehe ich alles: Namespaces, zugeordnete Hilfedateien, Filter und Plugins. Dann werde ich mich mal dran setzen, die Eigenschaften entsprechend auszulesen.


Mal eine Frage nebenbei, die aber mit dem Thema zu tun hat: Es sind ja einige professionelle Entwickler hier, die in regem Kontakt zu Microsoft stehen. Wie beurteilt ihr meine Chance, wenn ich mich an Microsoft wende und dort mal nachfrage ob man mir ein paar Infos zukommen lässt?
Ich weiß, dass Microsoft die Infos zum Help 2.0-API rausgibt. Aber ich weiß auch, dass in der Regel damit ein Stillschweigeabkommen (oder wie immer man das nennen will) verbunden ist. Ich weiß das deshalb, weil ich mich bereits an einen Entwickler gewandt habe. Der schrieb mir zurück, er würde mir gern helfen, er dürfe aber nicht ...
Speziell ginge es mir noch um den Prozess zum Registrieren/De-Registrieren von Namespaces, Hilfedateien, usw. Ich habe mittlerweile die dazu notwendigen Befehle gefunden. Und ich habe auch gewisse Vorstellungen davon wie man sie verwenden muss. Aber das Prinzip ähnelt grob gesagt einer Datenbank. Bevor man loslegen kann, muss man erst mal "Verbindung aufnehmen". An sich auch nicht schwer, da ich (wie gesagt) die Befehle kenne. Aber einer von denen erwartet einen String als Parameter. Und woher soll ich ohne Doku wissen was ich da reinschreiben muss? Ich hab´s schon mal versucht, bekam aber immer nur Ole-Fehler.

Und darum würde ich einfach mal eine freundliche Mail an Microsoft schreiben und dort nachfragen wollen.
Glaubt ihr, dass das was bringt?
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#6

Re: Frage zu OleVariant

  Alt 6. Mai 2004, 08:26
Zitat von MathiasSimmack:
Glaubt ihr, dass das was bringt?
Versuchen kannst Du es immer
Wenn Du Glück hast, dann bekommt es der richtige. Ich würde die Frage eher in einer Newsgroup stellen, in der sich die MS-Entwickler des entsprechenden Teams rumtreiben. Sicher bist Du nicht der erste der versucht dieses Problem zu lösen (und vielleicht gibt es bereits irgendwo eine Lösung, da es ja bereits Tools in der Richtung gibt).
NDAs (Non Disclosure Agreements) werden üblichwerweise nur mit Firmen abgeschlossen, da es relativ sinnlos/ineffektiv ist, eine Privatperson zu belangen...
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#7

Re: Frage zu OleVariant

  Alt 6. Mai 2004, 09:06
Da werde ich mal nach passenden Newsgroups Ausschau halten. Wie gesagt, ich hatte Rob Chandler gefragt ob er mir einen Tipp geben kann. Aber er durfte eben nicht. Kann ich auch irgendwo verstehen. Sein Tool H2Reg ist ja auch gar nicht schlecht, aber es ist ´ne komprimierte VCL-Exe. Ich bin sicher, dass man die Größe noch drücken kann. Das wäre für kleinere Hilfedateien/Setups idealer.

Na, hoffen wir, dass ich einen Entwickler finde, der auch mit sich reden lässt.

Anbei mal der Viewer, den ich mir zusammengeschraubt habe. Ist vom Design her nichts Besonders. Im Gegenteil, die Icons habe ich noch schnell ergänzt, sonst hätte es nach gar nichts ausgesehen. Auf Wunsch stelle ich den Quellcode auch rein. Die Typbibliothek (Microsoft Help Data Services) könnt ihr dann ja selbst importieren.

btw:
Zitat:
Wenn Du Glück hast, dann bekommt es der richtige.
Wie meinst´n du das eigentlich, Nico?
Angehängte Dateien
Dateityp: zip help2-namespaces.zip (198,5 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Frage zu OleVariant

  Alt 6. Mai 2004, 09:19
Zitat von Motzi:
Hab nen ähnlichen Fall und da funktioniert das so:
Delphi-Quellcode:
var
  propId : OleVariant;
  pluginEnum : IEnumHxRegPlugIn;

pluginEnum := IUnknown(propID) as IEnumHxRegPlugIn;
<Klugscheisermode>
Man sollte besser nach IDispatch casten, denn das OleVariant enthält einen Interfacezeiger
auf eine Dispatchschnittstelle:
pluginEnum := IDispatch(propID) as IEnumHxRegPlugIn; </Klugscheisermode>
Andreas
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#9

Re: Frage zu OleVariant

  Alt 6. Mai 2004, 10:00
Zitat von MathiasSimmack:
Wie meinst´n du das eigentlich, Nico?
So wie's da steht
(einen 'richtigeren' als Rob wirste zu dem Thema schwer finden... und wenn er nicht darf/will, dann ist das leider so. Wie gesagt, in Newsgroups findet man schneller Antworten (zumindest wenn die 'wissenden' merken, dass sich da jemand Arbeit macht und mehr vorzuweisen hat als die Frage selbst - und wenn es nur kleine Hinweise sind...)

ps: schönes Tool, seh gerade, dass mein PSDK namespace doppelt ist, upz
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: Frage zu OleVariant

  Alt 6. Mai 2004, 10:27
@shmia: Hab´s geändert, wusste ich nicht. Dennoch Danke an Motzi, und an dich!
@Nico: Ich werde trotzdem mal mein Glück versuchen. Wer nicht wagt, ...

btw: Ich frage ja sowas nicht ohne Grund: Link auf Wunsch entfernt. (Testversion)

[edit=Luckie]Link entfernt. Mfg, Luckie[/edit]
Angehängte Dateien
Dateityp: zip help2-namespaces-src.zip (5,7 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz