Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 300
Erhaltene Danke: 28

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Di 22.12.15 23:34 
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
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: Mi 23.12.15 02:11 
Vermutlich meinst du Finite Element Method Magnetics. Dort gibt es ein Wiki, das den Aufruf via ActiveX erklärt, auch über die Homepage/Examples via Punkt ActiveX Client for FEMM erreichbar. Gefunden mit den Stichworten Femm+ActiveX gleich der erste Eintrag. Beispiel ist auch dabei.

Mit finiten Elementen muß man sich natürlich auskennen, wenn man so eine spezielle Software nutzen möchte, davon gehe ich daher mal aus.
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 300
Erhaltene Danke: 28

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: 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.
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 2



BeitragVerfasst: Do 24.12.15 04:35 
user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
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.
Einloggen, um Attachments anzusehen!
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 3655
Erhaltene Danke: 594

Win XP x86, Win 8.1 x64
Lazarus Snapshot; Delphi 7,2007,XE; PHP (PHPEdit,PhpStorm); JS; Java(Eclipse)
BeitragVerfasst: 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:

ausblenden 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.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 300
Erhaltene Danke: 28

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Fr 25.12.15 20:42 
Danke an alle, mit den ganzen Anregungen habe ich die sehr einfache Lösung gefunden:

ausblenden 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