WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   DLL erstellen in VBA einbinden (http://www.wcm.at/forum/showthread.php?t=76146)

renew 06.11.2002 12:11

DLL erstellen in VBA einbinden
 
Wie erstellt man in VB 6.0 eine ActiveX DLL so, dass man eine Funktion/Prozedur in VBA in Access verwenden kann.

Und wie bindet man diese richtig ein (Verweise etc.)

Hab schon eine menge im INternet gesucht, aber net wirklich was gefunden.

NasenBär 07.11.2002 17:10

hy!

vielleicht wirst du hier fündig!

mfg

Seidl 07.11.2002 19:40

Also unter "Microsoft Visual Basic 6.0" im "Microsoft Visual Studio 6.0" legt man einfach ein neues Projekt "ActiveX DLL" an. In dem definiert man dann die Funktionen und wählt "File/make XYZ.dll".
Einbinden kann man solche DLLs dann mit "Project/References".

Da ich aber annehme, dass du das selbst auch geschafft hättest nehme ich fast an, dass du mit einem anderen Tool arbeitest. Was verwendest du denn?

renew 07.11.2002 19:47

Na ich bzw. wir(ein Freund und ich) schaffens net.

Die DLL schreib ma in VB 6.0 und erstellens dann auch.

Nur wie bekomm ich die gurken in VBA in Access dann eingebunden, dass ich Funktionen (also Werte) bzw. Variablen "by reference" übergeben kann.

Warum wir das machen is weil die Performance von VBA unter jeder Sau ist. Wir müssen eine Matrix 372x372, wo die "Datensätze" durhc ";" getrennt sind einlesen.
Wir haben das Ende von dem in VBA noch nicht abgewartet und habens nach einer Stunde abgebrochen.

Wenn wir das ganze über ein echtes VB 6.0 Projekt machen dauerts keine 2 Minuten und das File ist eingelesen. Und den Part wollt ma in eine DLL auslagern.

Die dll haben wir eh schon erstellt, nur können wir nicht auf die darin enthaltenen Funktionen zu greifen - wie macht ma des? ;)

Die Fehlermeldung die wir bekommen haben was i jetzt net auswendig, weil das ganze in der Schule liegt. Ich glaub, es war was, dass der Einsprungpunkt in der DLL nicht definiert war, oder so...? ;)

no IASCA 08.11.2002 18:29

also im kopf des Moduls schreibst z.B.:

Public Declare Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" (ByVal lpapplicationname As String, ByVal lpkeyname As Any, ByVal lpdefault As String, ByVal lpreturnedstring As String, ByVal nSize As Long, ByVal lpfilename As String) As Long

damit hast dann die DLL im zugriff und

und dann im Quellcode mit z.b. einer eigenen Funktion nutzen:


X = GetPrivateProfileString(sektion, Eintrag, "", temp, 255, Dateiname)

damit kannst doch die Variaben hin und her übergeben ...

renew 08.11.2002 18:35

Danke - werds dann ausprobieren....

PS: X = GetPrivateProfileString(sektion, Eintrag, "", temp, 255, Dateiname) - da fehlt ein A --> es müsste ja
GetPrivateProfileStringA heißen. ;) :p

renew 11.11.2002 09:06

Einsprungpunkt DLL
 
So jetzt hab ich wieder den gleichen Fehler wie vorher:

"Laufzeitfehler '453'
DLL-Einsprungpunkt addieren in c:\temp\test1.dll nicht gefunden"

Addieren heißt die Prozedur in der DLL und ihr werden 3 Argumente übergeben:
Code:

Public Sub addieren(ByVal zahl1 As Integer, ByVal zahl2 As Integer, ByRef summe As Integer)
   
    summe = zahl1 + zahl2
   
End Sub

Und so hab ich sie in VBA in Access eingebunden:

Code:

Private Declare Sub addierenneu Lib "c:\temp\test1addieren.dll" Alias "addieren" (ByVal z1 As Integer _
, ByVal z2 As Integer, ByRef ergebnis As Integer)

Und das is die Mörderfunktion die die obere Aufrufen soll:
Code:

Private Sub Befehl2_Click()

    Call addierenneu(1, 2, ergeb)
   
    MsgBox ergeb
   

End Sub

PS: das ganze is nur zum Test. ;)

renew 11.11.2002 10:27

Ich hab jetzt schon eine "Antwort" wegen des Runtime Errors gefunden - aber noch nicht wie ich das ganze umgeh.

Laut der Website: www15.brinkster.com/vbnotebook/vbnewbie.asp bindet man eine ActiveX DLL nicht über Declare ein sondern macht sich mit Dim/New/Set eine Instanz von dem Objekt(?) bzw nehm ich an von der Funktion.

Nur wie? ;)

I werd net fündig.

renew 11.11.2002 11:50

Ihr werdets nicht glauben - aber das ganze is viel einfacher als man denkt - bzw hat der Seidl recht gehabt und ich hab das irgendwie net so verstanden. ;)

Man bindet die DLL über verweise ein und dann greift man einfach auf die Funktion zu.

Mit Array muss man dann noch einen Typ in der DLL definieren und kann dann so darauf zu greifen.

Auf jeden Fall funkts jetzt. :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag