C++ DLL Funktion exportieren mit __declspec(dllexport) geht nicht
-
Hallo Leute,
ich habe eine DLL geschrieben, aus der eine Funktion exportiert werden soll. Normalerweise würde man das ja mit "__declspec(dllexport)" machen um sich eine .def-Datei zu sparen. Doch dies funktioniert bei mir nicht oder habe ich einen grundlegenden Fehler?
#ifdef CHANGESOUNDDEVICENATIVE_EXPORTS #define CHANGESOUNDDEVICENATIVE_API __declspec(dllexport) #else #define CHANGESOUNDDEVICENATIVE_API __declspec(dllimport) #endif CHANGESOUNDDEVICENATIVE_API SoundDevicesManager *CreateSoundDevicesManager();Wenn ich nun dumpbin verwende bekomme ich dies:
Dump of file ChangeSoundDevice.Native.dll File Type: DLL Summary 3000 .data 3000 .rdata 2000 .reloc 1000 .rsrc 6000 .textGruß cookie-exploit
P.S.:
Entwicklungsumgebung ist VS2010 und mein Betriebssystem ist Windows 7 Ultimate 64-BitCodegenerierung = Multithreaded -> also kein .net
-
Und was genau ist jetzt das Problem? Probiers mal mit
dumpbin /EXPORTS deine.dll
-
Das Problem ist, das die Funktion nicht exportiert wird, wenn ich keine .def-Datei angeben, was ja eigentlich passieren sollte da ich "__declspec(dllexport)" verwende.
Die Ausgabe, die ich ebend gepostet habe, war der Befehl "dumpbin /EXPORTS meine.dll".
-
Und CHANGESOUNDDEVICENATIVE_EXPORTS ist im dll Projekt auch definiert? Verwend __declspec(dllexport) mal direkt, um sicherzugehen...
-
Also sofern Visual Studio keine fehler macht eigentlich schon und ich habe es auch mal direkt davorgeschrieben, jedoch ohne Erfolg.

-
Sehr merkwürdig. Und der Header mit dieser Deklaration wird in der dll auch eingebunden und die dll die du anschaust ist auch tatsächlich das aktuelle Kompilat?
-
Jap so sieht es aus, ist die aktuell gebaute DLL und auch die Header-Datei wird eingebunden.
ChangeSoundDevice.cpp
#include "stdafx.h" #include "ChangeSoundDevice.h" //Header-Datei mit der Exportfunktion SoundDevicesManager *CreateManager() { ... }dllmain.cpp
#include "stdafx.h" #include "ChangeSoundDevice.h" //Header-Datei mit der Exportfunktion BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }Hier die Visual Studio ausgabe:
1>------ Neues Erstellen gestartet: Projekt: ChangeSoundDevice.Native, Konfiguration: Release Win32 ------ 1> stdafx.cpp 1> ChangeSoundDevice.cpp 1> SoundDevicesManagerImpl.cpp 1> dllmain.cpp 1> Code wird generiert. 1> Codegenerierung ist abgeschlossen. 1> ChangeSoundDevice.Native.vcxproj -> D:\Documents\Visual Studio 2010\Projects\ChangeSoundDevice\Release\ChangeSoundDevice.Native.dll ========== Alles neu erstellen: 1 erfolgreich, Fehler bei 0, 0 übersprungen ==========
-
Versuch mal, die Funktion auch bei der Definition als dllexport zu deklarieren...
-
Super, danke! Jetzt funktioniert es!

EDIT: Ich Trottel, mir ist gerade aufgefallen, dass ich als ich die Funktion umbenannt habe, ich vergessen habe den Namen bei der Implementierung auch zu ändern. -.-
Aber dank dir habe ich es ja herausgefunden!
