PDA

Vollständige Version anzeigen : Für Anspruchsvolle: DLL deklarieren


Ohnesorg
25.06.2001, 12:43
Hi, ich bin es schon wieder...

Mein E-Mail Problem GroupWise direkt anzusprechen ist fast gelöst. Zumindest habe ich - nachdem mir Novell scheinbar nicht helfen will - 'ne Idee für einen Lösungsansatz.

Ich kann mittels declare etc. verschiedene DLL's in meinen VBA - Quelltext einbinden und anschließend von dort aus die Funktionen nutzen, die ich benötige. (ein hoch auf DLL's)

Die Verweise in der Datenbank sind bereits eingestellt.

Ich darf auf keinen Fall den Befehl "SendObject" verwenden, da noch Dateianhänge an die E-Mails gehören, die nicht von Access erstellt werden und somit über VBA nicht angehängt werden können (Geht wirklich nur mit Dateien, die aus Access heraus erstellt werden können!!!)

Nun gibt es da folgendes, kleines Problem: :mad:
1)
Kann mir bitteschön irgendwer erklären, wie ich eine DLL in meinen VBA Quelltext einbinde!? Die OL Hilfe von Access bzw. VBA bringt mich nach 6 Stunden immer noch nicht weiter. Und Novell? Mag mich ja nicht!

2)
Mit der Schnellansicht (bin gerade am durchsuchen) kann ich die DLL auslesen und sehen, welche Funktionen dahinter stecken.
Kann mir dennoch jemand bei dem Wirrwarr der ganzen @-Zeichen, vorangestellten Fragezeichen etc bliblablubb helfen????????

Bittääää ich bin am verzweifeln, mein Kollege weigert sich, sich wieder zu mir ins Büro zu setzen, weil ich ja momentan sooo unausstehlich bin... Kurzum: Ich dreh' am Rad! :(


Für jede Hilfe bin ich dankbar, wie ich es nur selten bin/sein kann!!!

Kevin
25.06.2001, 13:47
HI,

probiere mal ScriptSPY, ist relativ gut.
Download bei www.heise.de/ct/ftp/???.... (http://www.heise.de/ct/ftp/???....)


Gruß Kevin

Ohnesorg
25.06.2001, 15:46
Ich danke Dir, Kevin,

aber gefunden habe ich den ScriptSpy nicht... leider.

Also... immer her mit neuen Lösungsansätzen, denn die Sackgasse entwickelt sich immer mehr auch zu einer Einbahnstraße. Reinfahren geht... herausfahren bedeutet als Geisterfahrer unterwegs zu sein. :(

Nicht lachen! Bei uns im Ort haben die Stadtväter für solch einen vaux pas schon gesorgt. :D

Günni
25.06.2001, 18:46
Hi, ich versuch mal, Dir das an nem Beispiel zu erklären. Ich nem dazu einfach ne API-Funktion zum abspielen von *.Wav-Datein. Grundsätlich läuft es aber bei jeder DLL gleich. Zuerst in einem Standard-Modul die Declare-Funktion Anweisung:

Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long


So, ich brösle das jetzt mal ein wenig auf:
Public Declare Function <-- grundsätzlicher Deklarationsteil
PlaySound <-- der Name, unter dem Du die Funktion innerhalb Deines Programm-Codes nutzen möchtest. Den Namen kannst Du frei wählen.
Lib "winmm.dll" <-- Name und ggf. der Pfad der DLL, die die Funktion beinhaltet.
Alias "PlaySoundA" <-- das ist der Name, unter dem die Funktion in der DLL gespeichert ist.
(ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) <-- das sind die Übergabe-Parameter an die Funktion. In der MSDN gibts irgendwo sogar ne Tabelle, die angibt welcher C-Datentyp in welchen VB-Datentyp umgewandelt werden muß. Grundsätzlich gilt: zu Zeigern (Pointern) in C gehören ByRef Datentypen in VB ... für "normale" Variablen in C gehören ByVal Datentypen in VB
As Long <-- Rückgabetyp der Funktion

So, nachdem die Funktion nun deklariert ist, kann sie in einem beliebigen Modul verwendet werden. Ich spiele hier mal vor dem Öffnene eines Formulares eine WAV-Datei ab:
Private Sub Form_Load()
Dim RueckgabeLng As Long

RueckgabeLng = PlaySound("C:\Test.wav", 0, 0)

End Sub

Um nun aber zu wissen, was an die einzelnen Parameter zu übergeben ist, muß man natürlich die DLL mit ihren Funktionen kennen ... das ist sicher schwieriger als das blose Handling der Anweisung ... aber dabei kann ich Dir leider nicht helfen, da ich auch nicht weiß, auf welche DLL´s Du nun zugreifen willst.

Kevin
26.06.2001, 11:55
@Günni, gut erklärt
@Ohnesorg, anbei nochmal die richtige Adresse.

ftp://ftp.heise.de/pub/ct/listings/0113-204.zip

Have fun
Kev

Ohnesorg
26.06.2001, 14:38
Hi Günni, Hi Kevin,

Zunächst einmal ein Dankeschön an Euch Beide.

@Kevin
Leider komme ich nicht auf die FTP - Seite. Unser Bordermanager mag mich nämlich nicht. Bzw. er mag keine File Transfer - Protokolle. :(

@Günni
Nachdem ich mehrere Fehlermeldungen von wegen "Einsprungmarke in xy.dll nicht gefunden" überwunden habe... musste ich ziemlich resigniert feststellen, dass die ganzen Funktionen, die in den DLL's hinterlegt sind gar nicht so einfach zu handlen sind.
Leider kann ich die nur mit der Schnellansicht öffnen und erfahre so aus der Importtabelle die Funktionsnamen. Was ich nicht erfahre sind die Parameter inkl. Datentyp, Reihenfolge und was diese Parameter bewirken sollen. Quasi alles für die Katz'.

Ich glaube, dass es an der Zeit ist aufzugeben, was den E-Mail versand per Access mit GroupWise angeht. Seit knapp drei Monaten kämpfe ich um eine Lösung. Bei Novell darf man keine Antworten erwarten, bei Microsoft ist niemand zuständig - Verständlich, da das komische GW von Novell ist - und hier gibt es keine Erfahrungswerte bzgl GW. Kann man ja nicht verübeln, wo es doch die wunderbare Funktion "SendObject" gibt.

Also danke ich nochmal Kevin und Günni, und werde verschiedenen Leuten, die das gleiche Problem haben, sagen, dass ich mich geschlagen gebe.

Günni
26.06.2001, 17:28
Ach was ... geht nicht gibts nich :-) ... ich darf Dich leider nicht bitte, mir das die DLL rüber zu schicken, weil das ja gegen das Urheber-Recht verstoßen würde. Deshalb sag ich jetzt mal: Wenn ich die DLL hätte, könnte ich Dir vielleicht etwas mehr dazu sagen.

Übrigens ... meine Email-Adress ist: mg@mgcss.de

Ohnesorg
27.06.2001, 08:40
Hi Günni,

schade eigentlich... ich meine die Sache mit Urheberrecht und so... Warum können die das nicht Open Source machen? Jeder könnte seinen Senf dazu geben und die Welt stünde vor weit weniger als die Hälfte von Konvertierungsfehlern...

In diesem Sinne... ab in die Rinne (mit dem Quelltext und der Idee...)