Dll LoadLibrary will nich.?
-
Guten Morgen, ich will eine Dll laden... Die Dll - ist im System32 verzeichniss, und hab sie auch noch in mein Projektverzeichnis kopiert.
include "stdafx.h" #include "tagReader2.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // The one and only application object CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs _tprintf(_T("Fatal Error: MFC initialization failed\n")); return 1; } // PATH TO SYSTEM HWND hwndOwner = NULL; char szPath[MAX_PATH]; szPath[0]='\0'; int nFolder=CSIDL_SYSTEM; // Sytem32 Fodler BOOL fCreate = 0; // no folder creation BOOL bErgeb = SHGetSpecialFolderPath(hwndOwner,szPath,nFolder,fCreate); CString szTheDll = _T(""); szTheDll.Format("%s", szPath); szTheDll +="\\RenaLibrary.dll"; HANDLE m_hHandle = NULL;; HMODULE m_hModule = NULL;; if (m_hModule == NULL) { m_hModule = LoadLibraryEx(szTheDll,m_hHandle,NULL); if (m_hModule == NULL) { TRACE("\nCANT LOAD"); FreeLibrary(m_hModule); return false; } else{ TRACE("\nLOADED LIBARY"); // Beispiel eines Loads Syntax Modul // funcname_name = (TYPEfuncName) GetProcAddress(m_hModule,"GetTagBit"); // func_uid = (TYPEfuncID) GetProcAddress(m_hModule,"GetTagChar"); } } return 0; }
aber das Modul handle ist immer NULL.. kann mir das einer erklären.. der DLL namen stimmt 100% und das Systemverzeichnis auch.
-
Über 3000 Beiträge, und noch immer die Basics der Fehlersuche nicht gelernt?
GetLastError.
-
GetLastError -> "ERROR_DLL_INIT_FAILED" hilft mir ja nich weiter, das er die dll nich laden kann is mir klar^^ Projekteinstellungen etc. sind ja nich notwendig oder wenn ichdas ding dynamisch lade... was für ein Anfänger fehler könnte ich noch gemaht haben, was habe ich evtl. übersehen
-
Häufige Fehlerquelle:
die DLL ist mit anderen DLLs verknüpft und kann eine der Abhängigkeiten nicht finden.
-
hmm.. das ist ein Ansatz.. ! Ja die Dll ist mit einer anderen verknüpft. d.h. wenn die andere Dll nich vorhanden "wäre", könnte ich diese Dll nich laden? hätte gedacht, das erst durch benutzung von funktionen der dll fehler auftreten.. danke
-
BorisDieKlinge schrieb:
hmm.. das ist ein Ansatz.. ! Ja die Dll ist mit einer anderen verknüpft. d.h. wenn die andere Dll nich vorhanden "wäre", könnte ich diese Dll nich laden? hätte gedacht, das erst durch benutzung von funktionen der dll fehler auftreten.. danke
Nur, wenn die zweite Dll dynamisch geladen wird. Bei einer (normalen) statischen Bindung lädt der Kernel diese sofort mit der ersten Dll. Und wenn es nicht geht, dann wird die erste auch nicht geladen.
-
hmm die verschachtelte Dll welche in meiner Dll verwendet wird, wird dynamisch geladen... Aber das war das Problem... danke
-
Mit "dynamisch" meine ich während der Ausführung einer beliebigen Funktion. Heißt diese Funktion aber DllMain, dann gibts natürlich den Fehler.
-
BorisDieKlinge schrieb:
hmm die verschachtelte Dll welche in meiner Dll verwendet wird, wird dynamisch geladen... Aber das war das Problem... danke
Du weißt hoffentlich, dass es nicht erlaubt ist LoadLibrary aus DLLMain heraus auszuführen
It is not safe to call LoadLibrary from DllMain.
Siehe http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx
-
mach ich das, siehe code?
-
BorisDieKlinge schrieb:
mach ich das, siehe code?
Dir traue ich alles zu.
-
BorisDieKlinge schrieb:
mach ich das, siehe code?
1. 100% ACK zum Kommentar von simon.gysi
2. Wie soll ich diesen Satz anders verstehen:hmm die verschachtelte Dll welche in meiner Dll verwendet wird, wird dynamisch geladen... Aber das war das Problem... danke
3. Sehe ich keinen Code Deiner DLL! Sondern nur den einer EXE!
Solltest Du also LoadLibrary in Deiner DLL Main ausführen, dann sei gewarnt! Es knallt an den übelsten nicht zu erartenden Ecken.
-
sorry, wir dachten aneinander vorbei;)
1. Die LoadLibrary meiner exe ruf ich ja in main auf;)
2. Diese Dll wiederum, also LoadLibrary ruft ne andere Dll in "iniInstance" auf;)
3. Hab die LoadLibrary nich geschrieben....EDIT: (verschrieben)
1. Die LoadLibrary meiner exe ruf ich ja in main auf;)
2. Diese Dll wiederum, also RenaLibrary ruft ne andere Dll in "iniInstance" auf;)
3. Hab die RenaLibrary nich geschrieben....
-
Und wie ist diese andere DLL an Deine DLL gebunden? Dynamisch oder implizit?
-
dynamisch..? Loadlibrary..
-
OK also dynamisch! Und wann führst Du LoadLibary in Deiner anderen DLL aus?
Also nur m sicher zu gehen.
- EXE lädt implizit oder dynmaisch eine DLL A
- DLL A lädt dann dynamisch DLL BWann macht DLL A?
-
DLL A stellt eine Schnittstelle (eine read/write funktionen) zwischen einem externe Device her.. diese funktionen liest bzw. schreibt die rohdaten vom gerät.
DLL B stellt eine spezialisrte Schnittstelle (read/write funktionen für best. Typen) zwischen einem exteren Device (über DLL A) her... diese funktionen schreiben/lesen Daten best. Typen (doub,int,string,etc) an das Gerät.
die EXE verwendent dann die spezialisierten funktionen. ich könnte auch direkt DLL A einbinden, müsste aber die Datenkonvertierung welche, von DDL B übernommen wird auch schreiben:)
DLL B ist kruz gesagt eine art wrapper:)
-
Martin Richter schrieb:
OK also dynamisch! Und wann führst Du LoadLibary in Deiner anderen DLL aus?
-
BorisDieKlinge schrieb:
Diese Dll wiederum, also RenaLibrary ruft ne andere Dll in "iniInstance" auf;)
-
BorisDieKlinge schrieb:
BorisDieKlinge schrieb:
Diese Dll wiederum, also RenaLibrary ruft ne andere Dll in "iniInstance" auf;)
von wo aus wird iniInstance aufgerufen?
Nicht etwa aus Dll- Main?