Dll Laden funktioniert nicht
-
Hallo Leute ich verstehe das Problem nicht, wenn ich versuche mit folgendne
HMODULE h = LoadLibrary(TEXT("my_dll.dll")); DWORD ERR = GetLastError();
die Dll zu laden bekomme, ich den ErrorCode 998 (INVALID ACCESS TO MEMORY).
Ich Verstehe nur nicht warum ! Die Dll ist völlig inordnung und verursacht keinen absturz, denn mit einem anderen Projekt lässt sie sich völlig inordnung nutzen.In der Ausgaben Konsole von Visual Studio steht noch folgendes:
Wenn ich das richtig verstehe, findet er auf jedenfall die DLL. Also daran kann es nicht liegen. Wenn das kein Programmierfehler ist. Muss ich vielleicht noch irgendwo was bei Visual Studio einstellen , damit dies reibungslos funktioniert.
Systemspezifikation sind:
Visual Studio 2008
Windows Vista
-
Hmmm,..
hört sich fieß an,...
vlt. hilft dir das weiter:
http://www.add-in-express.com/forum/read.php?FID=1&TID=2580Sei gegrüßt
-
Leider hilft es nicht weiter !!!!!!!!
Ich verstehe es einfach nicht ein minimal sample läd die DLL
anstandslos rein, gerade noch selbstgeschrieben.Habe dann mein Komplettes Projekt nochmal von Vorne in VisualStudio reingesetzt
und kriege exakt die Gleich FehlermeldungHat jemand ne Idee ?
-
Hi,
eine idee wäre, dass es sich evtl. um eine managed code dll also GAC dll und keine COM dll handelt.
Oder andere Machine? 32bit/64bit ?
grüße
_____________________________________________________________________________
raten macht spaß
-
Ich binde DLLs mit CBuilder als LIBs ein, die mit dem DOS-Tool makelib(mydll.lib,mydll.dll) gebildet werden. Es gibt aber auch andere Möglichkeiten. Meine WinApi-Beschreibung erklärt den Rückgabewert einer WinApi-DLL als HINSTANCE nicht als HMODULE. Vielleicht liegt hier der Fehler?
-
HINSTANCE und HMODULE sind identisch...
-
Hi,..
also du erstellst aus der dll eine statische lib die du beim compilen verlinkst?
Wenn du noch eine passende headerfile hast kannst du meines wissens das "manuelle" laden dann lassen, da sie beim aufruf einer *.lib fkt automatisch geladen wird. Wenn due keine header file hast, lass das einbinden der lib und lade über LoadLibrary deine dll.Jo der Martin hat recht:
HINSTANCE HMODULE HWND HBITMAP sind alle vom Typ HANDLE und dienen nur der unterscheidung.grüße
-
@zeusosc: Ich versteh nicht was du meinst. Es geht bei mir um eine DLL dich mittels LoadLibrary laden möchte!!! Ich habe keine Lib und ich will auch kein Lib Datei haben.
Die Dll und die Exe sind jeweils als 32 Bit gelinktUnd es handelt sich auch nicht um Managed Code in der Exe Datei.
Ich raffe eine Sache nicht, kann es sein das irgend ein Programmierfehler dazu führt das das Laden einer DLL mittels LoadLibrary fehlschlagen muss.
Und ich meine jetzt mit Fehler in der Exe Datei nicht in der DLL.Vielleicht hat ja jemand eine IDEE. Denn wie schon gesagt die DLL läst sich in anderen Projekten ohne Probleme mittels LoadLibrary laden.
Oder Kann es sein das irgendeine Lib die ich benutze, das verursacht das ich mittels LoadLibrary nichts mehr laden kann, weiss jemand von euch über diese Eigentümlichkeiten von Visual Studio bescheid ?
Mit freundlichen Grüßen und vielen dank für die Antworten
Cefour
-
Ich kann dir bei deinem Problem zwar keine Lösung unterbreiten, aber ich hatte vor nicht allzulanger Zeit ein ähnliches Problem.
Ich habe eine DLL einmal mit Codeblocks erstellt und exakt den gleichen Code in Visual-Studio 2008. Diese Dll wollte ich in einer bestehende Software als "Tag" einbinden. Die von VS2008 funktionierte. Die von CodeBlocks lieferte eine Exception.
Ein Ansatz wäre, falls dir der Quelltext der dll zur Verfügung steht, diese einfach nochmal frisch zu erstellen. Vielleicht auch einfach mal einen anderen Compiler verwenden.
-
Mein vorheriger Beitrag war missverständlich oder falsch, sorry!
1. Aus einer DLL wird eine Import-Bibliothek erstellt mit: implib myddl.lib mydll.dll - das ist keine statische LIB!
2. Damit steht die DLL für die Anwendung ohne explizites Laden bereit
3. In die Anwendung wird diese Import-Bibliothek eingebunden (IDE oder LoadLibrary)
4. Die DLL-Funktionen sind einzeln zu deklarieren mit: _import myfunction(...)
Diesen Weg gehe ich. Sicher geht es aber auch anders. Der frühere Weg mit einer Moduldefinitionsdatei (DEF) ist nicht mehr aktuell.
-
Wenn die DLL z.B. kein korrektes manifest hat, oder die CRT/MFC als externe DLLs benötigt und diese nicht installiert sind, dann schlägt das laden der DLL auch fehl.
Verwende DEPENDS auf dem rechner in dem Verzeichnis wo es nicht klappt. Depends wird die EXE dann auch nicht laden können.