loadLibrary verursacht error 193 (keine gültige win32 Anwendung)



  • Hi @ all,
    ich versuche eine MFC-Erweiterungs-dll dynamisch per Loadlibrary ("einedll.dll") zu laden. Dabei wird allerdings der Fehler 193 (Anwendung ist keine gältige Win32 Anwendung) geworfen.
    Ich arbeite mit Visual Studio 2008 auf einem 32-bit-System
    Ich habe schon mit dem Dependencywalker überprüft ob die Bibliothek irgendwelche 64-bit Bibliotheken verwendet (negativ). Desweiteren habe ich, nachdem ich http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspx gelesen habe auch eine Manifestdatei angelegt. Trotdem war der Fehler damit nicht behoben. Und nun weiß ich nicht mehr weiter was ich noch probieren soll.

    Hat jemand eine Idee womein Fehler liegt? ich habe unten den Quelltext der aufrufenden Datei angehängt und auch den von dllmain.

    Gruß Noranius

    //Aufrufende Ausführbare Datei
    #include "stdafx.h"
    #include "dlltest.h"
    #include <iostream>
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    // Das einzige Anwendungsobjekt
    
    CWinApp theApp;
    
    using namespace std;
    
    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    	int nRetCode = 0;
    
    	// MFC initialisieren und drucken. Bei Fehlschlag Fehlermeldung aufrufen.
    	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    	{
    		// TODO: Den Fehlercode an Ihre Anforderungen anpassen.
    		_tprintf(_T("Schwerwiegender Fehler bei der MFC-Initialisierung\n"));
    		nRetCode = 1;
    	}
    	else
    	{
    		SetDllDirectory(NULL);
    		HMODULE hMod = LoadLibrary("SensorC10988MAModule.dll");
    		DWORD err = GetLastError();
    		if (err == 0)
    			cout << "dll geladen";
    		else { cout << "Fehler "; cout << err; }
    	}
    
    	return nRetCode;
    }
    
    //dllMain.cpp
    // dllmain.cpp : Definiert die Initialisierungsroutinen für die DLL.
    //
    
    #pragma comment(linker,"\"/manifestdependency:type='win32' \
    name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
    processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'\"")
    
    #include "stdafx.h"
    #include <afxwin.h>
    #include <afxdllx.h>
    #include "ModulesBase.h"
    #include "SensorC10988MAModule.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    static AFX_EXTENSION_MODULE SensorC10988MAModuleDLL = { NULL, NULL };
    
    extern "C" int APIENTRY
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    	// Entfernen Sie dies, wenn Sie lpReserved verwenden.
    	UNREFERENCED_PARAMETER(lpReserved);
    
    	if (dwReason == DLL_PROCESS_ATTACH)
    	{
    		TRACE0("SensorC10988MAModule.DLL wird initialisiert!\n");
    
    		// Einmalige Initialisierung der Erweiterungs-DLL
    		if (!AfxInitExtensionModule(SensorC10988MAModuleDLL, hInstance))
    			return 0;
    
    		// Diese DLL in Ressourcenkette einfügen
    		// HINWEIS: Wird diese Erweiterungs-DLL implizit durch
    		//  eine reguläre MFC-DLL (z.B. ein ActiveX-Steuerelement)
    		//  anstelle einer MFC-Anwendung verknüpft, dann sollten Sie
    		//  folgende Zeilen aus DllMain entfernen, und diese in eine separate
    		//  Funktion einfügen, die aus der Erweiterungs-DLL exportiert wurde. Die reguläre DLL,
    		//  die diese Erweiterungs-DLL verwendet, sollte dann explizit die
    		//  Funktion aufrufen, um die Erweiterungs-DLL zu initialisieren. Andernfalls
    		//  wird das CDynLinkLibrary-Objekt nicht mit der Ressourcenkette der
    		//  regulären DLL verbunden, was zu ernsthaften Problemen
    		//  führen kann.
    
    		new CDynLinkLibrary(SensorC10988MAModuleDLL);
    
    	}
    	else if (dwReason == DLL_PROCESS_DETACH)
    	{
    		TRACE0("SensorC10988MAModule.DLL wird abgebrochen!\n");
    
    		// Bibliothek vor dem Aufruf der Destruktoren schließen.
    		AfxTermExtensionModule(SensorC10988MAModuleDLL);
    	}
    	return 1;   // OK
    }
    
    DEFINE_MODULE(CSensorC10988MAModule)
    
    BEGIN_MODULE_FACTORY(CSensorC10988MAModuleFactory)
    ADD_MODULE_ENTRY("Sensor:C10988MA",CSensorC10988MAModule)
    END_MODULE_FACTORY()
    


  • Das Problem hatte seine Ursache darin, da ich eigene und fremde DLL's verwende, haben sich Debug- & Release-Versionen vermischt

    MfG Noranius


Anmelden zum Antworten