Entwickler-Ecke
Windows API - Anderes Programm über ActiveX steuern
GuaAck - Di 22.12.15 23:34
Titel: Anderes Programm über ActiveX steuern
Hallo Leute,
ich nutze ein Programm FEMM, das führt spezielle Rechnungen durch. (Wen es interessiert, einfach nach FEMM suchen). Dieses Programm möchte ich von Delphi 7 aus steuern.
FEMM bietet ein sehr einfaches ActiveX-Interface, wie der Hersteller angibt:
FEMM registers itself as an ActiveX server under the name femm.ActiveFEMM42.
The interface to FEMM contains no properties and only two methods:
• BSTR call2femm(BSTR luacmd);
• BSTR mlab2femm(BSTR luacmd);
Man schickt einen Kommandostring hin und erhält einen Ergebnisstring zurück, call2femm und mlatb2femm liefern nur unterschiedliche Formatierungen. Beide Strings sind in der FEMM-Doku beschrieben.
Ich habe noch nie ewas mit ActiveX gemacht. ActiveX ist wohl der Nachfolger von OLE, dazu gibt es in der Hilfe zum Windows-SDK jede Menge Detail-Infos. Mit Google habe ich auch keinen Einstieg gefunden, wahrscheinlich einfach die falschen Suchwörter.
Ich muss doch eigentlich nur
- mich mit dem angegebenen ActiveX-Server verbinden,
- einen String dahin schicken,
- den Antwortstring lesen und
- die Verbindung schließen.
Wenn jemand einen Tipp hätte, wie ich da einen Weg finden könnte, ein treffendes Suchwort oder vielleicht sogar einen Code-Schnipsel...
Viele Grüße
GuaAck
GuaAck - Mi 23.12.15 23:34
Hallo Perlsau,
danke, das war eine wichtige Suchwortkombination, auf die ich nicht gekommen war.
Richtig helfen tut das aber nicht, alle die *.cpp und *.h Dateien habe ich nicht auf meinem Rechner, und ich bin in Delphi. Trotzdem, ein paar Begriffe werden klar. Kann sein, dass meine Delphi 7 Personal Version kein OLE beinhaltet. Vielleicht komme ich mit der Windows SDK ja jetzt zurecht, die Hilfe bei FEMM gibt da ja eine Richtung vor, in der ich suchen muss.
Schönes Weihnachtsfest an Dich als sehr aktiven "Antworter" im Forum,
GuaAck
P.S. In meinem Profil steht Delphi 7 Professional, ist falsch, wahrscheinlich hatte ich Delphi 5 als Professional Version, da war das noch in meinem Kopf als ich mich 2009 hier hier im Forum mit Delphi 7 registrierte. Korrigiere ich gleich.
Delete - Do 24.12.15 04:35
GuaAck hat folgendes geschrieben : |
Richtig helfen tut das aber nicht, alle die *.cpp und *.h Dateien habe ich nicht auf meinem Rechner, und ich bin in Delphi. Trotzdem, ein paar Begriffe werden klar. Kann sein, dass meine Delphi 7 Personal Version kein OLE beinhaltet. Vielleicht komme ich mit der Windows SDK ja jetzt zurecht, die Hilfe bei FEMM gibt da ja eine Richtung vor, in der ich suchen muss. |
Was genau meinst du mit "richtig helfen"? Offensichtlich ist das Beispiel für irgend einen C-Dialekt ausgelegt. Und so wie's aussieht, benötigt man gewisse "Treiber" bzw. ActiveX-Komponenten, auf die im Beispiel hingewiesen wird. Ich fürchte, mit deiner rudimentären Delphi-Version wirst du da nicht sehr weit kommen. In neueren Delphi-Versionen kann man sich ActiveX-Komponenten, wenn sie im System (OS) registriert sind, selbst erstellen: Menü Komponente -> Komponente importieren -> VCL für Win32 -> ActiveX-Steuerelement importieren.
Martok - Do 24.12.15 14:27
Oder, in D7 Pro etwas kürzer: Komponente->ActiveX importieren (so hieß das seit D3, keine Ahnung ob das in Personal drin ist).
Du bekommst dort neben dem Interface außerdem immer eine Co-Klasse importiert, so dass du direkt so etwas ähliches schreiben kannst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var femm: IActiveFEMM; FEMResult: WideString; begin femm:= CoActiveFEMM.Create; FEMResult:= femm.call2femm(MyLuaProgram); |
Mehr so für's Archiv: Lazarus kann auch COM,
Tutorial [
https://github.com/MartinTrummer/lazarus-com-example].
GuaAck - Fr 25.12.15 20:42
Danke an alle, mit den ganzen Anregungen habe ich die sehr einfache Lösung gefunden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| USES ... ComObj...;
PROCEDURE TForm1.Button1Click(Sender: TObject); VAR hs: STRING; femm: variant; BEGIN hs := '??'; femm := CreateOleObject('femm.ActiveFEMM'); Memo1.Lines.Add('create Ausgeführt'); hs := femm.call2femm('newdocument(0)'); Memo1.Lines.Add('newdoculemt Ausgeführt'); Memo1.Lines.Add(' RETURN: ' + hs); .... usw. END; |
Grüße GuaAck
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!