C++ LoadLibrary ERROR_NOACCESS "Ungültiger Zugriff auf Speicherbereich."

OK, also ich habe eine situation, in der ich nenne LoadLibrary auf eine DLL, die ich schrieb. Dieser Aufruf von LoadLibrary zurückgegeben Fehler #998, oder ERROR_NOACCESS "Ungültiger Zugriff auf Speicherbereich."

Die DLL in Frage MFC verwendet, die in einer Konfiguration, und in der anderen nicht; nur die MFC-Konfiguration hat dieses problem. Es verwendet, um die Arbeit, aber ich habe keine Ahnung, was ich geändert habe: ich würde sogar weiter, um die nicht-MFC-version und seit neuestem Recht viel mit, und ich habe keine Ahnung was ich getan haben könnte, dass die betroffenen die MFC-version.

Ich weiß nicht viel über DLLs. Der original-code laden war eigentlich, die mir gegeben, und ich habe Sie nicht geändert. Unten ist das code:

//submodule loading
#ifndef MFC
//Project uses standard windows libraries, define an entry point for the DLL to handle loading/unloading
BOOL WINAPI DllMain(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved)
{
    _MESSAGE("DllMain called.");
    switch(dwReason)
    {
    case DLL_PROCESS_ATTACH:    //dll loaded
        hModule = (HMODULE)hDllHandle;  //store module handle
        _MESSAGE("Attaching Submodule ..."); 
        break;
    case DLL_PROCESS_DETACH:    //dll unloaded
        _MESSAGE("Detaching Submodule ...");      
        break;
    }   
    return true;
}
#else
//Project uses MFC, we define here an instance of CWinApp to make this a 'well-formed' DLL
class CSubmoduleApp : public CWinApp
{
public:
    virtual BOOL InitInstance()
    {//dll loaded
        hModule = m_hInstance;  //store module handle
        _MESSAGE("Attaching Submodule ...");
        return true;
    }
    virtual int ExitInstance()
    {//dll unloaded
       _MESSAGE("Detaching Submodule ...");      
       return CWinApp::ExitInstance();
    }
} gApp;
#endif

Offensichtlich MFC definiert ist, die in der MFC-Konfiguration, und nicht anders.

Bezweifle ich, das ist genug Informationen, um dieses problem zu lösen; ich merke, dass. Was ich eigentlich gehofft zu erfahren, ist , wo Sie zu suchen für Probleme, die, die möglicherweise diesen Fehler verursachen. Ich werde glücklich sein, zu liefern alle Informationen, die Sie brauchen—, wenn ich weiß, es ist notwendig.

Vielen Dank für alle Tipps.

Haben Sie versucht, läuft es im debugger? Das sollte lokalisieren den Fehler schnell.
Man kann sicherlich führen diese unter dem debugger. Sie müssen einen break-Punkt schön und früh in den code und vergeben Sie einen host-Anwendung.
Haben Sie versucht, das laden der DLL aus dem test-Programm, statt aus dem original-host-Programm? Wenn Sie Glück haben, wird es zeigen den gleichen Fehler, was würde das Debuggen viel einfacher.
Vielleicht, aber wenn der Fehler Auftritt, sobald die DLL geladen, es wird nicht keinen Unterschied machen, oder?
DllMain (und damit vermutlich auch die InitInstance) ist ein Sonderfall; code, der perfekt funktioniert, auch anderswo brechen könnte beim Aufruf von DllMain aufgerufen.

InformationsquelleAutor KRyan | 2011-10-07

Schreibe einen Kommentar