Wie der Titel schon sagt, möchte ich eine API für ein eigenes Programm erstellen. Diese soll Events vom Programm bekommen können, aber die API sollte auch Funktionen und Events feuern können, auf die dann das Hauptprogramm reagiert. Nun such ich nach Anleitungen, die beschreiben wie man sowas macht. Mit Google habe ich nichts gefunden, was mir weiterhilft.
API für eigenes Programm
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 92 Antworten in diesem Thema. Der letzte Beitrag () ist von singu.
-
-
Das Schlüsselelement dafür ist ein öffentliches Interface. In diesem deklarierst du die Member, die du extern verfügbar machen willst, z.B. Function TueEtwas(). Dieses Interface implementierst du selbst in einer Klasse, sodass TueEtwas() eine Bedeutung bekommt. Die Klasse braucht dann noch eine so genannte Fabrikmethode, die dir Instanzen des Interfaces ausspuckt, z.B. Shared Function GetInstance() As IDeinInterface. Ein externer Aufrufer würde sich nun über diese Fabrikmethode eine Referenz auf dein Interface besorgen: Dim var As APIprogramm.IDeinInterface = ...GetInstance(). Mit 'var' ist es dem externen Programm erlaubt, var.TueEtwas() auszuführen. Das Ganze nochmal als Codebeispiel:
VB.NET-Quellcode
- Public Interface IDeinInterface
- Function TueEtwas() As Int32
- End Interface
- Public Class MyAPI
- Implements IDeinInterface
- Public Shared Function GetInstance() As IDeinInterface
- Return New MyAPI
- End Function
- Private Function TueEtwas() As Int32 Implements IDeinInterface.TueEtwas
- Return 5
- End Function
- End Class
EDIT: Zugriffsebenen angepasst. Es fällt auf, dass über das Interface von außen auch Private-Funktionen aufgerufen werden können...
Das gegebene API funktioniert Online und Offline - das heißt, dass die Anwendung nicht gestartet sein muss, um das Interface zu instanzieren. Stattdessen wird der Code in die aufrufende Anwendung geladen. Wenn du ein API erstellen möchtest, welches nur bei einer laufenden Anwendung funktioniert, solltest du dich mit RPC und TCP/IP beschäftigen. Es gibt 1001 Möglichkeiten, ein API zu schreiben - das gezeigte ist eine davon. Such dir also was ausGruß
hal2000
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ ()
-
-
singu schrieb:
Das Codebeispiel würde dann ins Hauptprogramm gehören?
Wenn das API Funktionen ausführen soll, die darin definiert sind, dann ja.
Was meinst du mit Fabrikmethode?
Die heißt so, weil sie (wie eine Fabrik) Instanzen der API an externe Aufrufer ausliefert. Damit kannst du z.B. die Anzahl der gleichzeitig aktiven Instanzen kontrollieren.
Müsste ich dann das ganze in eine DLL packen und diese dann von beiden Seiten verwenden.
Das geht auch, bedeutet aber mehr Programmieraufwand. Die DLL ist eine eigenständige Assembly, die ihrerseits die Funktionen wieder aus dem Hauptprogramm importieren und dann veröffentlichen müsste. Die DLL ist somit ein Zwischenschritt, der auch entfallen kann. Als Alternative kannst du gleich eine Bibliothek schreiben, die von allen Anwendungen verwendet wird.
Was du aber auf jeden Fall benötigst ist eine Referenz auf die Assembly, die die gewünschten Funktionen veröffentlicht. Das ist bei anderen APIs nicht immer ganz offensichtlich, aber ein zentraler Bestandteil des Konzepts.Gruß
hal2000
-
-
-
-
Ereignisse kannst du einfach im Interface deklarieren. Zum Behandeln muss der Handler registriert werden, der Aufruf wird über den deklarierten Delegaten ausgeführt. Daten werden über Parameter ByVal oder ByRef oder über Rückgabewerte ausgetauscht. Es iat auch ein zentraler Speicher möglich, wenn benötigt. Dieser sollte sich dort befinden, wo er auch verwaltet wird, also im Hauptprogramm.Gruß
hal2000
-
-
-
FatFire schrieb:
Schau dir mal meine Beitragszahl an. Wobei ich bei dir schon die unnötigen Beiträge kenne.
Ich weiß wie man Events feuert und auf die reagiert im programm. Aber mein problem ist momentan wie kann mit der API auf Events reagieren, die im Hauptprogramm gefeuert werden. -
singu schrieb:
Schau dir mal meine Beitragszahl an. Wobei ich bei dir schon die unnötigen Beiträge kenne.
Wüsste zur Zeit keinen unnötigen Beitrag (unerwünscht eher) von Fatfire. Aber ich habe mal wieder ein Verständnisproblem mit Deiner Fragestellung:
Wir befinden uns mit .NET in der OO-Welt, insofern kapseln wir Funktionalitäten und Member in einer Klasse, nicht mehr in "Unterprogrammen".Insofern fragst Du also danach wie Du am geschicktesten Dein Unterprogramm in eine Klasse kapselst. Und das solltest Du mittlerweile bei soviel Beiträgen wissen. Klassen reagieren ja auf Ereignisse von aussen, indem sie geeignete Methoden zur Verfügung stellen.
@Hal2000 denke dass Interfaces hier garnicht nötig sind -
Schau dir mal meine Beitragszahl an.
Hatte ich schon angeschnitten das Thema, willst Du es wirklich schon wieder aufwärmen? Ist doch nicht schlimm, wenn Du mal einen schlechten Tag hast.
Wobei ich bei dir schon die unnötigen Beiträge kenne.
Ich versuche zu helfen und nicht meine Unfähigkeit zur Schau zu stellen. Bei den meisten funktioniert es ziemlich gut, aber einige sind eben lernresistent. Wenn man damit nicht klarkommt, dass ich eben auch mal Tacheles rede, dann tut mir das nicht wirklich leid.
Aber mein problem ist momentan wie kann mit der API auf Events reagieren, die im Hauptprogramm gefeuert werden
Beschäftige Dich mal mit Delegaten, AddressOf und AddHandler. Du musst schon die Verweise auf die aufzurufenden Methoden übergeben.
Gruß FatFire -
-
singu schrieb:
Ich programm schon objektorieniert. Bei mir sind fast alle Sachen in Klassen. Nun möchte ich aber eine API schreiben, die auf Events vom Hauptprogramm reagiert. Und das ist mir unklar wie das gehen soll.
Eine API sind die öffentlichen Member , Methoden und Events einer Klasse ! Basta ..
Will man für unterschiedliche Klassen die gleiche API benutzen benutzt man ein Interface.
Deine Klasse "reagiert" auf Ereignisse von aussen durch die Methoden die sie zum Aufruf bereitstellt. Mach bitte mal ein (simples) Beispiel, was Du eigentlich vorhast ... -
-
Ich befürchte Du hast wirklich miteinander verwuselte Haupt- und Unterprogrammer und keine gekapselten Klassen.
machen wir noch ein Beispiel:
Klasse A verwendet die Klasse B, daher kann sie auch auf den Event B reagieren. Kann es sein , dass Du möchtest dass Klasse B auf irgendwas in der Klasse A reagiert ? Also von der Oberklasse ?
Nicht schön aber wurde von Microsoft bei den Controls auch gemacht, indem auf die Containerklasse (=parent) referenziert wurde. Du musst also in B ein Member parent anlegen und der Klasse B beim Constructor mitgeben.
dann kannst Du in B auf den Typ(parent) abfragen und casten, und danach per AddHandler die Events zuweisen.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kangaroo“ ()
-
-
singu schrieb:
Du verstehst mich immer noch nicht.
Hab ich schon öfter bemerkt, wir sprechen definitiv nicht die gleiche Sprache
singu schrieb:
Nun möchte ich für das Programm auch ne API schreiben
Wenn Du Dein Programm in .NET geschrieben hast ist Dein "Hauptprogramm" eine Klasse und Deine API sind die Elemente die als Public definiert wurden, auch die Events.
Du musst also Dein Hauptprogramm nur als Library kompilieren, eh Voila ! -
Also nochmal das Hauptprogramme habe ich in VB.NET geschrieben, das ist ein ausführbares Programm. Nun möchte ich die API als DLL programmieren, diese kann in anderen Programmen eingebunden werden. Nun soll die API auf Events vom Hauptprogramm reagieren und auch Funktionen und Events feuern können, auf die dann das Hauptprogramm reagiert. Das ganze ist ja nicht schwer zu verstehen. das einzigste wo ich nicht weiterkomm, wie kann ich Daten vom Hauptprogramm an die API schicken und andersherum
-
Ähnliche Themen
-
VB.net Programm disassemblieren
Norbert49 - - Sonstige Problemstellungen -
theber - - Sonstige Problemstellungen
-
Lego623 - - Sonstige Problemstellungen