WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 06.11.2002, 12:11   #1
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard 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.
renew ist offline   Mit Zitat antworten
Alt 07.11.2002, 17:10   #2
NasenBär
Master
 
Registriert seit: 01.08.2001
Beiträge: 527


Standard

hy!

vielleicht wirst du hier fündig!

mfg
NasenBär ist offline   Mit Zitat antworten
Alt 07.11.2002, 19:40   #3
Seidl
Veteran
 
Registriert seit: 10.01.2001
Beiträge: 478


Standard

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?
Seidl ist offline   Mit Zitat antworten
Alt 07.11.2002, 19:47   #4
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

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...?
renew ist offline   Mit Zitat antworten
Alt 08.11.2002, 18:29   #5
no IASCA
Veteran
 
Registriert seit: 03.12.1999
Beiträge: 429


Standard

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 ...
____________________________________
Car Audio Austria - Auto Hifi
no IASCA ist offline   Mit Zitat antworten
Alt 08.11.2002, 18:35   #6
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

Danke - werds dann ausprobieren....

PS: X = GetPrivateProfileString(sektion, Eintrag, "", temp, 255, Dateiname) - da fehlt ein A --> es müsste ja
GetPrivateProfileStringA heißen.
renew ist offline   Mit Zitat antworten
Alt 11.11.2002, 09:06   #7
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard 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 ist offline   Mit Zitat antworten
Alt 11.11.2002, 10:27   #8
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

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 ist offline   Mit Zitat antworten
Alt 11.11.2002, 11:50   #9
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

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.
renew ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:01 Uhr.


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