Hallo zusammen,
ich versuche grad mit dem Dev C++ ein DLL Projekt erstellen:
und
Kompilieren lässt sich das Ganze problemlos.
Wenn ich allerdings versuche, auf eine Funktion der DLL zuzugreifen, funktionierts nicht.
Der Zugriff soll dynamisch erfolgen. Zu Testzwecken definiere ich zunächst einen Zeiger auf eine der DLL Funktionen und Deklariere eine Variable dieses neuen Typs.
Mit new_handle lade ich die DLL. Das funktioniert noch. Wenn ich allerdings mit GetProcaddress auf die konkrete Funktion zugreifen will bekomme ich immer nur null statt der Adresse der Funktion
Weiss möglicherweise von euch jemand, wo der Fehler liegen könnte?
gruß
kristian
ich versuche grad mit dem Dev C++ ein DLL Projekt erstellen:
Code:
//dllmain.h
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
class DLLIMPORT my_class
{
public:
my_class();
virtual ~my_class(void);
void function1(parameter..);
void function2(parameter..);
private:
};
#endif /* _DLL_H_ */
und
Code:
//dllmain.cpp
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
my_class::my_class()
{
....
}
my_class::~my_class ()
{
....
}
void my_class::function1(parameter...)
{
....
}
void my_class::function2(parameter...)
{
....
}
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
Kompilieren lässt sich das Ganze problemlos.
Wenn ich allerdings versuche, auf eine Funktion der DLL zuzugreifen, funktionierts nicht.
Der Zugriff soll dynamisch erfolgen. Zu Testzwecken definiere ich zunächst einen Zeiger auf eine der DLL Funktionen und Deklariere eine Variable dieses neuen Typs.
Mit new_handle lade ich die DLL. Das funktioniert noch. Wenn ich allerdings mit GetProcaddress auf die konkrete Funktion zugreifen will bekomme ich immer nur null statt der Adresse der Funktion
Code:
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
typedef void(__stdcall *P_function1) (parameter...);
P_function1 m_function1;
HINSTANCE new_handle = NULL;
int main(int argc, char *argv[])
{
new_handle = LoadLibrary("myDLL.dll");
if (!new_handle)
cout<<"dll nicht geladen"<<endl;
else
m_function1=(P_function1) GetProcAddress (new_handle,"function1");
cout<<m_function1<<endl; //gibt null aus
system("PAUSE");
return EXIT_SUCCESS;
}
Weiss möglicherweise von euch jemand, wo der Fehler liegen könnte?
gruß
kristian