2017-06-12 7 views
0

ich sehr sehr einfache DLL mit zwei Dateien gemacht haben:Cant Ladefunktionen von dlls

          dllmain.cpp 
              dll.hpp 

dllmain.cpp:

#include "dll.h" 
#include <windows.h> 

messageimport::messageimport() 
{ 

} 

messageimport::~messageimport() 
{ 

} 

void messageimport::message() 
{ 
MessageBox(0, "Hello World from DLL!\n","Hi",MB_ICONINFORMATION); 
} 

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) 
{ 
    switch(fdwReason) 
    { 
    case DLL_PROCESS_ATTACH: 
    { 
     break; 
    } 
    case DLL_PROCESS_DETACH: 
    { 
     break; 
    } 
    case DLL_THREAD_ATTACH: 
    { 
     break; 
    } 
    case DLL_THREAD_DETACH: 
    { 
     break; 
    } 
} 

/* Return TRUE on success, FALSE on failure */ 
return TRUE; 

}

dll.hpp:

#ifndef _DLL_H_ 
#define _DLL_H_ 

#if BUILDING_DLL 
#define DLLIMPORT __declspec(dllexport) 
#else 
#define DLLIMPORT __declspec(dllimport) 
#endif 

class DLLIMPORT messageimport 
{ 
public: 
    messageimport(); 
    virtual ~messageimport(); 

    void message(); 


}; 

#endif 

und ich verwende die DLL aus einer Datei namens Dlltes T.cpp

dlltest.cpp:

#include <iostream> 
#include <windows.h> 

using namespace std; 

typedef unsigned int(WINAPI* message)(void); 

int main(int argc, char** argv) { 

HMODULE dll = LoadLibrary("Call.dll"); 
if(dll != NULL){ 

    cout << "loaded dll \n"; 

    message func = (message)GetProcAddress(dll, "message"); 

    if(func != NULL) 
    { 
     cout << "found function"; 
    }else{ 

     cout << "cant find function"; 
    } 
}else{ 

    cout << "cant load the library"; 
} 




return 0; 
} 

Aber wenn ich die dlltest.cpp Sein Ausgang laufen ist wie

geladene DLL kippt Suchfunktion

+0

so muss ich die Zeile ändern 'void message();' in dll.hpp zu "extern" C "void message()" ??? –

+0

sry wie definiere ich BUILDING_DLL –

+0

In Ihren Preprozessor-Einstellungen für die DLL. – drescherjm

Antwort

0

Hier guter Artikel ist, warum can't simple export classes

Wahrscheinlich wollen Sie nicht wirklich exportieren Klasse, so einfach Pool Nachricht von Klasse und Export als nur Funktion. Es tut mir leid, dass ich keinen Code, keine C++ atm zur Verfügung stelle.

+0

danke brah, dass funktioniert hat –