Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst DLL nur über absolute Pfadangabe erreichbar

Mitglied: miniversum

miniversum (Level 3) - Jetzt verbinden

14.03.2008, aktualisiert 18.03.2008, 15100 Aufrufe, 7 Kommentare

Hallo
Ich programmiere grade ein Makro in VBA in Excel 2003.
Darin greife ich auf eine Hardware zu, die über eine DLL ansprechbar ist.
Mein Problem ist, dass ein Ansprechen der DLL Funktion über
Private Declare Function Funktionsname Lib "namederdll.DLL" (ByRef Version As Long) As Integer
nicht funktioniert. Hier bekomme ich immer die Fehlermeldung das er die Datei namederdll.DLL nicht finden kann. Benutze ich hingegen eine Absolute Pfadangabe funktioniert es:
Private Declare Function Funktionsname Lib "C:\Pfadzurdll\namederdll.DLL" (ByRef Version As Long) As Integer
Ich würde es aber lieber relativ lassen.
Ein versuch mit einem
Private Declare Function Funktionsname Lib ActiveWorkbook.Path & "namederdll.DLL" (ByRef Version As Long) As Integer
Schlug auch fehl. Hier bekomme ich die Fehlermeldung das nach dem Lib eine Zeichenfolge erwartet.

Mit andern dlls funktioniert es relativ, nur mit dieser nicht.

Registrieren kann ich die dll mit regsvr32 auch nicht. Hier bekomme ich nach der Eingabe von
regsvr32 namederdll.dll
immer die Meldung "namederdll.dll wurde geladen, aber der DllRegisterServer-Eingangspunkt wurde nicht gefunden. Diese Datei kann nicht registriert werden.

Gibt es also eine Möglichkeit um eine absolute Pfadangabe herumzukommen?

miniversum
Mitglied: misterdemeanor
14.03.2008 um 18:01 Uhr
Hallo miniversum,

wenn Du legiglich den Namen der dll angibst, sprich ohne Pfadangabe, wird an folgenden Orten nach der dll gesucht:

  1. Verzeichnis deiner XLS-File
  2. In dem Systemverzeichnis [Windowsverzeichnis]\System32
  3. Im [Windowsverzeichnis] (z.B. C:\Windows)
  4. An den in der PATH Umgebungsvariablen angegebenen Verzeichnissen.

Ansonsten kannst Du auch mittels der LoadLibrary Function Deine dll mit absoluter Pfadangabe selbst laden. Also "normal" deklarieren:

01.
Private Declare Function Funktionsname1 Lib "namederdll.DLL" (ByRef Version As Long) As Integer 
02.
Private Declare Function Funktionsname2 Lib "namederdll.DLL" (ByRef Version As Long) As Integer 
03.
 
04.
Private Declare Function LoadLibrary Lib "kernel32"  Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long 
05.
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
und bevor Du das erste mal eine Funktion Deiner dll aufrufst die LoadLibrary Funktion aufrufen:
01.
Dim hndModule As Long 
02.
hndModule=LoadLibrary("C:\Pfadzurdll\namederdll.DLL")
Wenn Du dann keine dll-Aufrufe mehr tätigst, den aus der LoadLibrary Funktion zurückgebenden ModulHandle wieder freigeben:
01.
FreeLibrary(hndModule)
BG, Felix -misterdemeanor-
Bitte warten ..
Mitglied: miniversum
15.03.2008 um 08:55 Uhr
Danke für die Antwort.
Das mit dem .dll weglassen hat nicht funktioniert. Keine Ahnung warum.
Aber die zweite Möglichkeit mit dem LoadLibrary geht.

miniversum
Bitte warten ..
Mitglied: miniversum
15.03.2008 um 10:50 Uhr
Zu früh gefreut.
Mit der zweiten Dll (von gleichen hersteller) funktioniert beides nicht. Nichtmal mit absolutem pfad. Ich bekomme immer die fehlermeldung das die dll nicht gefunden werden kann. dabei liegt sie im richtigen Verzeichnis.
Woran könnte das liegen?
Bitte warten ..
Mitglied: misterdemeanor
17.03.2008 um 17:59 Uhr
Hallo miniversum,

Das mit dem .dll weglassen hat nicht funktioniert.

Solltest Du auch gar nicht versuchen...es wird zwar nach bestimmten Dateiendungen gesucht...war aber auch blöd von mir bei obigen Beispiel diese wegzulassen

Zu früh gefreut. Mit der zweiten Dll (von gleichen hersteller) funktioniert beides nicht.

Also bei Verwendung von LoadLibrary sollte dann zumindest ein Fehler geworfen werden! Wenn Du LoadLibrary(".dll") verwendest musst Du dies vor dem ersten aufrufen einer gewünschten Funktion machen. Da keine Fehlermeldung kam (bis auf "kann Datei nicht finden") die wahrscheinlich bei dem Aufruf einer Funktion aus gewünschter dll kommt. Verbessere mich wenn die Fehlermeldung beim Aufruf von LoadLibrary kommt.

Nichtmal mit absolutem pfad. Ich bekomme immer die fehlermeldung das die dll nicht
gefunden werden kann. dabei liegt sie im richtigen Verzeichnis.

Den Tipp mit LoadLibrary gab ich Dir nur damit Du einen relativen Pfad verwenden kannst. Bsp:

01.
Private Sub Workbook_Open() 
02.
  Dim sPathToDll2 As String 
03.
    sPathToDll2 = Application.ActiveWorkbook.Path & "\Ressources\namederdll2.DLL" 
04.
       'unbedingt aufrufen BEVOR Nutzung von "FunktionsnameAusDLL2" 
05.
    LoadLibrary(sPathToDll2) 
06.
End Sub
Woran könnte das liegen?

s.o.
Am besten Du kopierst Deine dll´s einfach nach [Windowsverzeichnis]\System32

BG, Felix -misterdemeanor-
Bitte warten ..
Mitglied: miniversum
17.03.2008 um 18:42 Uhr
Also:
Ich habe das LoadLibrary schon vorher benutzt. Funktioniert hatte es trotzdem nicht.

Diese meldung kommt eher vom Excel, bze vom Windows denke ich mal. Sie heist wirklich "Kann namederlibrary nicht finden".

Inzwischen hab ich es jetzt hinbekommen das es geht.
Nachdem ich die Hardware per USB angesteckt habe hat sich zusätzlich ein "USB-Verbundgerät" erkannt und mit Treibern installiert die vom Windows kommen. Danach ging es. Die Dll wird mit LoadLibrary gefunden und ich kann sie verwenden.

miniversum
Bitte warten ..
Mitglied: misterdemeanor
17.03.2008 um 21:57 Uhr
Hi miniversum,

Ich habe das LoadLibrary schon vorher benutzt.
Funktioniert hatte es trotzdem nicht.

...
Irgendetwas mit es wird ein USB Hardteil verwendet und nun kam was neues; Treiber wurden installiert

Die Dll wird mit LoadLibrary gefunden und ich kann sie verwenden.

Super________YIppIE!!!!!

Mein "Gedankengang" beim Lösungspost lässt sich vielleicht so ausdrücken: ?? 0

BG, Felix -misterdemeanor-
Bitte warten ..
Mitglied: miniversum
18.03.2008 um 09:22 Uhr
Der Ablauf war folgender:
Ich hatte die DLLs als Treiber von der Entsprechenden internetseite runtergeladen. Die Hardware würde ich erst später bekommen, aber ich ging davon aus das das einbinden der DLLs auch ohne die Hardware ginge. Und das war ebennicht so. Ich bekamm immer die Meldung das die Datei auf die ich bei der Deklaration der Funktionen verweise nicht gefunden werden könne.
Ich hatte also nun alle Möglichkeiten, auch mit loadlibrary und so, durch und es ging nicht. Inzwischen hab ich die Hardware bekommen, diese per USB mit dem PC verbunden und beim ersten einstecken wurde diese als ein "USB-Verbundgerät" erkannt. Windows hat daraufhin einen eigenen Treiber dafür installiert und seither kann ich die DLL ansprechen, ohne was am Programm geändert zu haben.

Mein Gedankengang nach dem Einstecken der Hardware war übrigens ein ähnlicher wie deiner
Bitte warten ..
Ähnliche Inhalte
Windows Server

DLL kerbauth.dll Konfigurationsproblems - OWA und alle anderen Seite nicht mehr erreichbar

Frage von scheugmaWindows Server8 Kommentare

Hallo ich bekomme folgende Fehlermeldung Die Modul-DLL "C:\Program Files\Microsoft\Exchange Server\V14\Bin\kerbauth.dll" konnte aufgrund eines Konfigurationsproblems nicht geladen werden. Die aktuelle ...

Batch & Shell

Umlaute in Pfadangaben

gelöst Frage von goodbytesBatch & Shell8 Kommentare

Hallo, ich stehe leider immer noch vor dem leidigen Thema Umlaute in Batches :- Bei Dateinamen und in den ...

Batch & Shell

Robocopy mit Strichen (minus) in den Pfadangaben

gelöst Frage von 45455Batch & Shell6 Kommentare

Hallo, ich muss einige 1000 Dateien aus einer verschachtelten Struktur verschieben, bei der ich allerdings Unterordner ausschließen muss. Soweit ...

Batch & Shell

For-Schleife Leerzeichen in Pfadangabe

gelöst Frage von goodbytesBatch & Shell3 Kommentare

Hallo, mittels For-Schleife sollen zeilenweise Pfadangaben aus einer txt-Datei geholt werden und damit was abgearbeitet werden. Ist ja soweit ...

Neue Wissensbeiträge
Exchange Server
Exchange - Fehler mit 2018-07 Sicherheitsupdate
Tipp von ArnoNymous vor 7 StundenExchange Server3 Kommentare

Hallo, es gibt mal wieder Freude mit den MS-Updates. KB4338814 führt dazu, dass der Exchange keine Mails mehr zustellt. ...

Suche Projektpartner

PC Recycling Projekte mit Flüchtlingen und Kids suchen Materialspenden und Mitmacher!

Erfahrungsbericht von NettePCyclePiraten vor 1 TagSuche Projektpartner7 Kommentare

Hallöchen liebe Kollegen, ich betreue zwei PC-Gruppen im Raum Dortmund: "Ne#e PCycle Pir@ten" & "PCschr@uber Br@mbauer" Wir sind eine ...

iOS
IOS 12.2 beta und OpenVPN iPad und iPhone
Erfahrungsbericht von magicteddy vor 1 TagiOS

Moin, kleiner Hinweis an die experimentierfreudigen unter Euch: Bei der aktuellen beta gibt es ein Problem im Zusammenspiel zwischen ...

Vmware
VMware Tools 10.3 verfügbar
Information von sabines vor 1 TagVmware

Eine Sicherheitslücke wird mit den Tools der Version 10.3 geschlossen, die Tools müssen auf jeder VM aktualisiert werden. Näheres ...

Heiß diskutierte Inhalte
Microsoft
Dringend: Nach neustart kein zugriff mehr per RDP möglich - vermutlich wegen gelöschter SID in AD
gelöst Frage von sven784230Microsoft30 Kommentare

Hallo zusammen, gerade hat ein Server 2012 (terminalserver + Active directory) einen geplanten Neustart durchgeführt, wenn ich mich jetzt ...

Windows Netzwerk
Netzwerk einrichten - wie mache ich es richtig?
Frage von gintonikWindows Netzwerk18 Kommentare

Hallo, ich bin neu hier und erhoffe mir hier ein paar Antworten für meine Umsetzung zu erhalten. Kurz zu ...

Microsoft Office
Druckdatum nur auf ausgedrucktem Dokument anzeigen
gelöst Frage von eichi18Microsoft Office16 Kommentare

Hallo zusammen Ich versuche in einem Word Dokument das Druckdatum nur auf dem eigentlichen Ausdruck auszugeben und am Bildschirm ...

CPU, RAM, Mainboards
4x 2 GB DDR2 1066 gesucht
gelöst Frage von Windows10GegnerCPU, RAM, Mainboards15 Kommentare

Hallo, ich plane den RAM meines Rechners aufzurüsten. Motherboard: Gigabyte X48 DS5 Der FSB steht bei 259, daher soll ...