2016-05-09 9 views
0

Ich habe einige Probleme, eine DLL in einer Windows-Konsolenanwendung zu laden, die ich für ein Klassenprojekt codiere. Ich weiß nicht, warum es die Bibliotheksdatei nicht lädt.Fehler beim Laden der DLL in C/C++

Bevor ich Loadlibrary nennen, wo ich den Fehler habe, definiere ich diese vor dem Haupt:

#include "lomo2.h" 

und

HINSTANCE cargaDLL; 

Auch habe ich versucht, zu ändern HINSTANCE Typen HMODULE aber es ist nutzlos.

Danach in Haupt ich versuche, die DLL zu importieren, die in Haupt befindet:

cargaDLL = LoadLibrary("C:\\lomo2.dll"); 
if (cargaDLL == NULL){ 
    PERROR ("Error en la carga de la libreria\n"); 
    Sleep(2000); 
    exit (1); 
} 

Als ich rufe Loadlibrary Ich habe auch einen relativen Pfad zu verwenden versuchte, wie „Loadlibrary (\ mein dll Verzeichnis \. lomo2.dll) "aber es funktioniert überhaupt nicht.

Das Ergebnis ist die Meldung, in der ein Fehler beim Verknüpfen der Bibliothek in PERROR angezeigt wird.

Überprüfen Sie den Fehler mit GetLastError() es sagt, es kann das angegebene Modul nicht finden.

Ich hoffe, Sie können mir helfen, dieses Problem zu lösen. Thnaks.

+0

Gibt es abhängige dlls? – drescherjm

+0

Nein. Sie haben nur den Header lomo2.h und die DLL-Datei lomo2.dll bereitgestellt und es sollte funktionieren. Für dieses Programm werden keine weiteren Dateien benötigt. –

+0

Ich würde 'GetLastError()' verwenden, um den Fehlercode zu erhalten, wenn die 'cargaDLL == NULL' – drescherjm

Antwort

-2

Das Problem wurde gelöst, indem der Zeichensatz von "Unicode" in "No Set" in den Visual Studio-Projekteinstellungen geändert wurde.

Vielen Dank für Ihre Antworten.

+0

Hätten Sie den * Zeichensatz * auf * Unicode * gesetzt, würde der Code in Ihrer Frage nicht einmal kompiliert. Entweder hast du in deiner Frage gelogen, oder das ist keine Antwort. Außerdem ist die Auswahl der schlechtesten vorstellbaren Zeichencodierung für ein neues Projekt niemals eine Lösung. – IInspectable

+0

Ich lüge nicht. Die Konfiguration von Visual Studio war der Standard, also habe ich den Zeichensatz nicht auf Unicode gesetzt, es war standardmäßig eingestellt. Und deshalb würde es nicht kompilieren. Also war die Antwort für mein Problem Was ich gesagt habe (mein Lehrer hat mir davon erzählt, könnte der Grund für dieses Problem sein) oder die Funktion LoadLibrary zu LoadLibraryW ändern. –

+0

Wenn Sie die Standardeinstellungen (Unicode) belassen, dann wird 'LoadLibrary (" C: \\ lomo2.dll ");' nicht kompiliert. Da du über Linker-Fehler sprichst, hat es ** kompiliert, also sagst du nicht die Wahrheit. Sie haben entweder keine Unicode-Zeichenkodierung verwendet oder es gab keine Linkerfehler (sondern Compilerfehler). Auf jeden Fall muss eine Frage, die den Ausdruck * "es funktioniert nicht" * enthält, verbessert werden. – IInspectable

0

Ich würde etwas wie Process Monitor verwenden, die Ihnen zeigen wird, was das Programm macht, wenn es versucht, die DLL zu laden.

Ich hatte ein ähnliches Szenario mit mir auftreten und was mit mir passierte war, dass Windows nicht die DLL in den lokalen Speicherort gefunden, so begann es durch bekannten Standorten. Eine davon war, den PATH zu durchsuchen, in meinem Fall enthält der PATH einen Ort, auf den nicht zugegriffen werden konnte. Dies führte dazu, dass die Suche gestoppt wurde und die DLL nicht geladen wurde.

0

Verwenden Sie den folgenden Code ein:

HMODULE cargaDLL; 
cargaDLL = LoadLibrary(L"C:\\lomo2.dll"); 

immer mit UNICODE als Typ des Projekts arbeiten. Die Verwendung des relativen Pfads ist aus anderen Gründen besser (die Verwendung von "c: \ lomo.dll" funktioniert). Wenn Sie mit anderen Programmierern an einem Projekt zusammenarbeiten, sollten Sie davon ausgehen, dass alle Dateien in einem Ordner gespeichert werden und einen relativen Pfad zu diesem Ordner verwenden.