AGB  ·  Datenschutz  ·  Impressum  







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

ActiveX einbinden

Ein Thema von Praktikant · begonnen am 30. Okt 2003 · letzter Beitrag vom 31. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#1

ActiveX einbinden

  Alt 30. Okt 2003, 12:03
Folgendes Problem:
ich habe ein fertiges ActiveX Programm welches ich schon über activex importieren installiert habe.

Aber wie kann ich auf das activex zugreifen? Es ist kein symbol in der Palette dazugekommen, bei compilieren passiert auch nichts.

Auszug auf Code den ich in einem Fenster habe (so eine art formular, nur ohne das Formular )
Delphi-Quellcode:
 
...
    _S5 = interface(IDispatch)
    ['{74C143B6-E5EE-4345-B9BF-0C511DBE9DD1}']
    function Get_Tzeit: Double; safecall;
    procedure Set_Tzeit(Tzeit: Double); safecall;
    function Get_belegt: WordBool; safecall;
    procedure Set_belegt(belegt: WordBool); safecall;
    function Get_dbinia1: WideString; safecall;
    procedure Set_dbinia1(const dbinia1: WideString); safecall;
    function Get_dbinia2: WideString; safecall;
    procedure Set_dbinia2(const dbinia2: WideString); safecall;
    function ag_comini(var comport: WideString; var comstr: WideString): WordBool; safecall;
    function ag_comout: OleVariant; safecall;
    ...
Wie kann ich jetzt aus einem Formular heraus auf zB. ag_comini zugreifen?

Muss ich immer dem project mein activex hinzufügen, oder wie bindet man activex ein???
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#2

Re: ActiveX einbinden

  Alt 30. Okt 2003, 15:10
hi,

Ich weiss jetzt nicht was der beste Weg ist, aber ich hab sowas ähnliches so gelöst:

Suche im Code (Typelibrary) von deinem ActiveX nach sowas ähnlichen:

ClassID: '{591091BD-DF3E-4C2A-B91F-C29559D04590}'; Die CLSID (in den geschwungenen Klammern) wird bei dir einen anderen Wert haben. Nach dem suchst du in der Registry. Dort suchst du nach einen Eintrag so ähnlich wie das Bild im Anhang. Der Text im roten Kästchen ist der Klassenname meiner ActiveX-Kompo.

Du machst eine Variable vom Typ Variant
Delphi-Quellcode:
..
ActiveXVariable : Variant;
..
So kreierst du den Objekt (das S7TCPIP.S7TCP ist der Klassenname den du in der Registry findest)

  ActiveXVariable := CreateOleObject('S7TCPIP.S7TCP') So gibst du es wieder frei
  ActiveXVariable := Unassigned; Dazwischen kannst du dein Objekt ganz normal verwenden, allerdings gibts auf diesem Weg keine Typprüfung und auch keine Codevervollständigung. Es gibt noch einen anderen Weg, bei dem du diese Vorteile wieder hast, aber den hab ich leider nicht zu laufen bekommen.

BTW: Gehe ich recht in der Annahme, dass du auf S5-SPS zugreifen willst? Ich arbeite gerade an einer Kompo zur Kommuniktion mit einer S7 und bin soweit, dass ich mit der SPS kommunizieren kann, aber die Werte noch nicht richtig auslese.
Miniaturansicht angehängter Grafiken
clsid.jpg  
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: ActiveX einbinden

  Alt 30. Okt 2003, 15:43
super, vielen dank!

Wie soll man auch darauf kommen - ohne irgend eine Dokumentation...

Du hast richtig getippt, soll eine Kommunikation mit einer S5 sein, mit einem fertigen activex Baustein.
Das Problem ist dass nur eine kurze Beschreibung für vidualbasic vorhanden ist, und da kann ich gar nicht damit anfangen - bzw. hat es da den Anschein dass so was wie eine Komponente erzeugt wird, die man aus der Palette heraus ins Formular setzen kann, doch da geschieht bei delphi nach dem installieren gar nichts in der Richtung.

Tjo, jetzt versuche ich es mal mit Deinen Tipps, hoffe das es klappt.
Habe auch schon eine S7 Verbindung (über eine dll) zustande gebracht. Bei den Werten musst Du beachten das wenn Du ein word ausliest zuerst das niederwertige und dann das höherwertige ausgegeben wird (somit sind die ersten 8 Bits mit den letzten 8 vertauscht).
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#4

Re: ActiveX einbinden

  Alt 30. Okt 2003, 15:49
Double-Werte kann ich schon auslesen, war ne schwere Geburt. Booleans hab ich noch nicht geschafft, das liegt aber mehr daran, dass ich keine Ahnung von dem Ding habe und es nicht schaffe einen Booleanausgang zu setzen.
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: ActiveX einbinden

  Alt 30. Okt 2003, 16:13
hab auch absolut keinen Plan von einer SPS, liefert die nicht immer nur einen dezimalen Wert?
Ich habe eine inttobin Wandlung vorgenommen wenn ich die einzelnen bits benötige.
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#6

Re: ActiveX einbinden

  Alt 30. Okt 2003, 17:18
nö wenn ich nen Ausgang, der als float definiert ist abfrage liefert er mir nen 4 byte Fliesskommawert
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#7

Re: ActiveX einbinden

  Alt 31. Okt 2003, 10:27
Problem:
Habe die registry durchsucht und das einzige was halbwegs ähnelte hatte den Wert "S5".

Wenn ich nun die von Dir gennanten Befehlszeilen reinschreibe und das Programm starte kommt zu Laufzeit die Fehlermeldung "Ungültige Klassenzeichenfolge".

Ist nun mein Klassenname der falsche?! Die anderen Werte in der Class ID sahen selber aber aus wie eine class ID.

Und nu meine Frage:
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#8

Re: ActiveX einbinden

  Alt 31. Okt 2003, 10:33
Du kannst natürlich nicht den Klassennamen verwenden den ich oben geschrieben habe, dass ist der für das ActiveX, dass ich benutze.

Der Teil, in dem ich meine ClassID gefunden hab sieht so aus:

Delphi-Quellcode:
procedure TS7TCP.InitControlData;
const
  CControlData: TControlData2 = (
    ClassID: '[color=#ff002d]{591091BD-DF3E-4C2A-B91F-C29559D04590}[/color]';
    EventIID: '';
    EventCount: 0;
    EventDispIDs: nil;
    LicenseKey: nil (*HR:$80040111*);
    Flags: $00000000;
    Version: 401);
begin
  ControlData := @CControlData;
end;
Den Klassennamen gabs dann in der Registry unter: HKLM\Software\Classes\CLSID\{591091BD-DF3E-4C2A-B91F-C29559D04590}
Daniel
Testen ist feige!
  Mit Zitat antworten Zitat
Praktikant

Registriert seit: 24. Sep 2003
131 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: ActiveX einbinden

  Alt 31. Okt 2003, 10:47
habe mich schlecht ausgedrückt. habe natürlich nicht deine Adressen verwendet, sondern mit Befehlszeilen meinte ich
ActiveXVariable := CreateOleObject('S7TCPIP.S7TCP') und
ActiveXVariable := Unassigned;

Bin nun so einem Querverweis in der registry gefolgt und es scheint ich habe die richtige Klassennummer (oder was auch immer ) gefunden.

Nach meinem CreatOLE kann ich nun auf das von mir anfangs genannte ag_comini usw. zugreifen?!

Mir ist aber nicht klar wie. Muss ich das S5-ActiveX Objekt einbinden?
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#10

Re: ActiveX einbinden

  Alt 31. Okt 2003, 10:57
Nein, musst du nicht einbinden.

Nachdem deine ActiveXVariable erzeugt wurde kannst du die Funktionen aus der TLB ganz normal aufrufen. Nur hast eben keine Typprüfung oder Codevervollständigung
Delphi-Quellcode:
  ActiveXVariable := CreateOleObject('S7TCPIP.S7TCP')
  ActiveXVariable.ag_comini(...);
Daniel
Testen ist feige!
  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 04:47 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