![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() 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. |
![]() |
![]() |
![]() |
#3 |
Veteran
![]() Registriert seit: 10.01.2001
Beiträge: 478
|
![]() 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? |
![]() |
![]() |
![]() |
#4 |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() 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...? ![]() |
![]() |
![]() |
![]() |
#5 |
Veteran
![]() Registriert seit: 03.12.1999
Beiträge: 429
|
![]() 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 |
![]() |
![]() |
![]() |
#6 |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() Danke - werds dann ausprobieren....
PS: X = GetPrivateProfileString(sektion, Eintrag, "", temp, 255, Dateiname) - da fehlt ein A --> es müsste ja GetPrivateProfileStringA heißen. ![]() ![]() |
![]() |
![]() |
![]() |
#7 |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() 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 Code:
Private Declare Sub addierenneu Lib "c:\temp\test1addieren.dll" Alias "addieren" (ByVal z1 As Integer _ , ByVal z2 As Integer, ByRef ergebnis As Integer) Code:
Private Sub Befehl2_Click() Call addierenneu(1, 2, ergeb) MsgBox ergeb End Sub ![]() |
![]() |
![]() |
![]() |
#8 |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() 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. |
![]() |
![]() |
![]() |
#9 |
Inventar
![]() Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552
|
![]() 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. ![]() |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|