Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

VBA<->FB-DLL per disphelper

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 11.01.2010, 14:11    Titel: VBA<->FB-DLL per disphelper Antworten mit Zitat

Ich habe mal eine ungewöhnliche idee für den komfortablen Datenaustausch zwischen VB(A)-Projekten und einer FB-DLL:

+Der Disphelper kann VB-Komponenten ansprechen.
+Mit FB kann man DLLs erstellen die in VBA-Projekten eingebunden werden können.

-Der schnelle und komforable Datenaustausch zwischen FB-DLL und VB(A) ist hingegen nicht so einfach.

=Daraufhin dachte ich mir, dass man den disphelper dazu verwenden könnte Objekte eines VB(A)-Projektes an eine DLL zu übergeben und darin weiterzuarbeiten.
Vorteil: Schneller als VB(A) und halbwegs sicherer Code, weil die DLL im gegensatz zum VB(A)-Code kompiliert wird.

In meinem Fall ist das ein Excel-VBA-Projekt!

Dazu ist mir folgendes Code eingefallen:

FB-DLL (kompilat ablegen in "C:\Excel_dll\xldll.dll" ansonsten Pfad in dem Makro anpassen):

Code:

'(muss kompiliert werden mit fbc -dll -export)
#define UNICODE
#INCLUDE ONCE "windows.bi"
#include once "disphelper\disphelper.bi"
EXTERN "windows-ms"
    FUNCTION testen alias "testen" (byval sht as IDispatch ptr, rng as IDispatch ptr ) AS INTEGER EXPORT
        Dim As Zstring Ptr txt = NULL
       
        dhInitialize(TRUE)
        dhToggleExceptions(FALSE)
       
        dhGetValue("%s", @txt, rng, ".value")

        MessageBox(0, "Hallo :" & *txt, "Dialogfenster", 0)
        return 0
    end function
END EXTERN


Excel-Makro:
Code:

Private Declare Function testen Lib "C:\Excel_dll\xldll.dll" (ByRef Sht As Object, ByRef rng As Object) As Boolean

Sub testdll()
    MsgBox testen(ThisWorkbook.Sheets(1), Range("A1"))
End Sub


In diesem beispiel soll einmal das object Sheets(1) von Thisworkbook und Range("A1") an die FB-DLL-Funktion übergeben werden.

Auf der DLL seite "empfängt" die DLL diese Parameter per IDispatch ptr.
Value von Range("A1") soll nun in einer Windows-Messagebox in der DLL ausgeben werden.. Es wäre natürlich nützlich, wenn man in "A1" des aktuellen Blattes in Excel was reinschreibt...

Wenn man nun die DLL mit den richtiger compiler-parametern kompiliert und das makro startet, wird mal leider mit einem Absturz von Excel belohnt traurig ...

Weiss einer ob das grundsätzlich funktioniert, oder ob ich einen fehler gemacht habe?
bzw. anscheinend hab ich ja einen fehler gemacht XD .. sonst würd der nich abstürzen..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz