Von APD über COM nach SOAP – Teil 2

Im letzten Teil haben wir ein COM-Objekt in Gupta erzeugt. Nun wollen wir das aus einer anderen „Welt“ heraus aufrufen. Beispielhaft binden wir das Objekt in ein Excel-VBA-Programm ein (wir könnten natürlich auch Word, Access , Visual Studio etc. verwenden – entscheidend ist, dass eine Sprache verwendet wird, die COM-Objekte einbinden kann).

Das COM-Objekt

Wichtig ist mir zunächst, dass man Werte aus den gängigen Datentypen (Number, String und Date/Time) aus der Gupta-Welt in die VBA-Welt überträgt.  Also erstellen wir in unserem COM-Objekt vom letzten Mal (IMyCOM) eine Methode namens GetGuptaData(..).

Return:
Boolean
Parameter:
Number: nInput - als Datatype: VT_I4
Receive Number: nOutput - Datatype: VT_R8
Receive Date/Time: dtOutput
Receive String: sOutput
Code:
Set nOutput = 3.1415 * nInput
Set dtOutput = SalDateCurrent() + nInput
Set sOutput = SalNumberToStrX(nInput)
Return TRUE

Das Ganze als Inproc-COM-Server (DLL) kompilieren und – wichtig – einmal per Debug/Go laufen lassen. Dann wird das COM-Objekt in Windows registriert. Alternativ kann man auch per Commandline „regsvr32 GuptaCom.dll“ aufrufen.

Einbinden in Excel

Excel starten und via Extras/Makro/Visual Basic Editor selbigen öffnen. Dort unter Extras/Verweise in der Liste unser neu erstelltes COM-Objekt (GuptaCom 1.0 Type Library) ankreuzen und somit einbinden. Ab sofort können wir Objekte daraus instanziieren und deren Methoden aufrufen.

Und das geht z.B. so:  Einfügen / Modul

Dort den Programmcode eintragen:

Function Show() As Boolean
Rem Variablen deklarieren
Dim cMyCom As GuptaCom.MyCom
Dim nParameter As Integer
Dim nResult As Double
Dim dtResult As Date
Dim sResult As String
Dim bResult As Boolean
Rem Klasse instanziieren
Set cMyCom = CreateObject("GuptaCom.MyCom")
Rem Parameter aus aktueller Tabelle Zelle A1 abholen
nParameter = CInt(Worksheets(1).Range("B1").Value)
Rem Gupta-Funktion aufrufen
bResult = cMyCom.GetGuptaData(nParameter, nResult, dtResult, sResult)
If (bResult = True) Then
ActiveSheet.Range("B2").Value = "Funktionsaufruf erfolgreich"
ActiveSheet.Range("B3").Value = nResult
ActiveSheet.Range("B4").Value = dtResult
ActiveSheet.Range("B5").Value = sResult
Else
ActiveSheet.Range("B2").Value = "Fehler"
ActiveSheet.Range("B3").Value = ""
ActiveSheet.Range("B4").Value = ""
ActiveSheet.Range("B5").Value = ""
End If
Rem Returnwert zurückgeben
Show = bResult
End Function

Das Ganze speichern und zurück zur Excel-Tabelle. Über Ansicht/Symbolleisten/Steuerelement-Toolbox diese einblenden. Den Button wählen und auf’s Worksheet zeichnen. Mit „rechte Maustaste“/Eigenschaften den Button formatieren. „Rechte Maustaste“/Code anzeigen führt zur Programmstelle,  wo wir den Programmaufruf für das Click-Ereignis eintragen können. Z.B.:

Private Sub pbGetGuptaData_Click()
Call Modul1.Show
End Sub

Tabelle an sich noch etwas formatieren. Den Input-Parameter in Zelle B1 eintragen, die Ergebnisse des Funktionsaufrufs werden in B2:B5 ausgegebnen.
Ach ja – unter Extras/Makros/Sicherheit muss die Stufe Mittel oder Niedrig gewählt werden.

Jetzt kann aus Excel heraus Gupta-Programmcode aufgerufen werden.

Der oben beschriebene Beispielcode kann hier abgerufen werden: GuptaCom.zip

Advertisements

Über thomasuttendorfer
Ich bin Entwicklungsleiter bei der Softwarefirma [ frevel & fey ] in München. Wir entwickeln Business-Software für Verlage und verwenden dafür den Gupta Team-Developer sowie Visual Studio.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: