DLL innerhalb DLL laden



  • Hallo,

    ich versuche innerhalb einer DLL einer weitere DLL zu laden und auszuführen, allerdings erhalte ich bei LoadLibrary bisher kein gültiges Handle.
    Ich habe nun schon einiges versucht-siehe auskommentierte Zeilen.
    Das Ergebnis von LoadLibrary ist jedoch jedesmal 0.

    Die dll's habe ich auch schon in die entsprechenden Verzeichnisse kopiert (aktuelles, Debug, Debug-Dll Windows/System32 usw...

    der Aufruf:

    TError = this->execSecondTest("test_dpx_dll.dll");
    

    und der Code...

    TEST_ERROR CTestMax2Box::execSecondTest(CString sdllName)
    {
    	HINSTANCE hDLL;
    	TESTFUNC TestFunction;
    	TEST_ERROR TError;
    	hDLL = NULL;
    	TestFunction = NULL;
    	char cpDll[256];
    
    //	hDLL = LoadLibrary("test_dpx_dll.dll");
    	m_FlashCard.LittleHelper.Str2AChar(sdllName,cpDll,254);
    //	hDLL = LoadLibrary((LPCTSTR) sdllName);
    	hDLL = LoadLibrary(cpDll);
    	if (hDLL != NULL)
    	{
    		TestFunction = (TESTFUNC)GetProcAddress(hDLL,"TestFunction");
    		if (!TestFunction)
    		{
    			m_pParam->m_Printf(m_pParam->m_hTesthandle,"No access to TestFunction!\n");
    			TError = TEST_CPU_ERROR;
    		}
    		else
    		{
    			//m_pTestThread=AfxBeginThread(StartTest,(void *)m_pCTest,THREAD_PRIORITY_NORMAL);
    			TestFunction(m_pParam);
    			TError = TEST_OK;
    		}
    		FreeLibrary(hDLL);
    	}
    	else
    	{
    		m_pParam->m_Printf(m_pParam->m_hTesthandle,"Could not open %s!\n",sdllName);
    		TError = TEST_ABORT;
    	}	
    	return TError;
    
    }
    


  • Ich würde es eigentlich fast ausschleßen, da das offensichtlich deine eigene DLL ist, die du auf deinem Entwicklungsrechner laden willst, aber: sind für diese DLL denn alle Abhängigkeiten erfüllt (=>depends.exe)?

    EDIT: Übrigens solltest du nach LoadLibrary mal GetLastError ausführen!



  • Danke für die schnelle Antwort, leider komme ich noch nicht wirkliche weiter

    GetLastError bringt mir den Code 126, was auch nur folgendes aussagt:

    126 The specified module could not be found. ERROR_MOD_NOT_FOUND

    Die DLLs sind beide eigene DLLs und lassen sich einzeln von der Haupt-Applikation ohne Problem laden.

    Aber prinizipiell dürfte doch nichts dagegen sprechen innerhalb einer DLL eine andere zu laden - oder?



  • Übergib an LoadLibrary mal einen absoluten Pfad.



  • so, jetzt tuts - es waren doch noch ein paar Abhängigkeiten in der einen DLL, die nicht gefunden wurden.
    Gruss&1000Thanks


  • Mod

    Eine DLL in einer DLL zu laden ist OK, solange Du das nicht in DLLMain machst!


Log in to reply