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
so muss ich die Zeile ändern 'void message();' in dll.hpp zu "extern" C "void message()" ??? –
sry wie definiere ich BUILDING_DLL –
In Ihren Preprozessor-Einstellungen für die DLL. – drescherjm