Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

28.06.2006, 01:05

Funktion von einer DLL definieren

Hi,

ich habe da ein kleines Problem, nähmlich soll eine Funktion aus einer DLL
in einem normalen Projekt definiert werden, damit sie in einer bestimmten
Stelle in der DLL aufgerufen werden kann. Es geht darum, dass der User
an der richtigen Stelle Daten laden kann. Das Problem dabei ist ja, dass
beim Export der Funktion mittels "__declspec(dllexport)" den Datentyp
verändert. Es gibt aber sicherlich noch andere Möglichkeiten um meine
Vision zu realisieren :) die Frage ist nur wie, ich bin noch sehr unerfahren
im Umgang mit DLL's. Ihr könnt mir da sicherlich helfen...
Hier mal ein kleines Beispiel:

DLL:

C-/C++-Quelltext

1
2
3
4
5
6
__declspec(dllexport) void Init(); // oder auch {}


void ausfuehren()
{
   Init();
}


Normales Projekt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include "dll.h"

void Init()
{
   Lade("test.bmp");
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
   ausfuehren();
   return 0;
}

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

2

28.06.2006, 07:52

Das musst du anders machen :p
Du musst ausführen exportieren den die soll ja genutzt werden den Init wird in der dll gebraucht :p

Hier mal der Code:

//Dll:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
#define Export __declspec(dllexport) 

void Export ausfuehren()
{
   Init();
}

void Init()
{
   Lade("test.bmp");
}


//Deine dll.h in deinem Programm:

Quellcode

1
2
3
4
//Jetzt musst du die Funktion importieren:
#define Import __declspec(dllimport) 

void Import ausfuehren();


//Dein Programm:

Quellcode

1
2
3
4
5
6
7
#include "dll.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
   ausfuehren();
   return 0;
}


So muss das sein ;)
Den in der dll sind die .cpp in der Init sein muss :)
Ausfuehren() ruft init nur aus der dll herraus auf :p
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Anonymous

unregistriert

3

28.06.2006, 11:41

Ähm, aber in dem Programm soll ja die Init Funktion definiert werden und
nicht in der DLL. Ansonsten hätte ich das ja auch hinbekommen :P

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

4

28.06.2006, 12:45

verstehe ich das richtig, dass du eine dll einbinden willst, die umgekehrt aus dem programm eine init funktion rauslädt???

müsste doch funktionieren können, indem du einfach den funktions pointer übergiebst. oder liegt sone dll in nem anderen address bereich??? wenn ja dann würd ich den instance handle der anwendung übergeben und dann mit GetProcAdress arbeiten. aber ob das wirklich funktioniert weiß ich nicht. und was das bringen soll ist mir auch nicht ganz klar
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Anonymous

unregistriert

5

28.06.2006, 12:51

Mh ich hatte gehofft, dass mein Beispiel alles verdeutlicht, wie es
ablaufen soll, diese Lösung aus dem Beispiel funktioniert nur nicht ganz :p
Also die Init Funktion soll in einem Programm, dass die DLL einbindet
definiert werden. Diese definierte Init Funktion soll dann in der DLL
aufgerufen werden. Der Aufruf ist kein Problem nur die Definition
funktioniert nicht. Mit Pointern, usw funktionierts schonmal nicht, habe auch
schon so einiges ausprobiert.

Werbeanzeige