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

11

06.04.2008, 15:22

hmm, bei mir siehts nen weing anders aus ...

also meine dll.cpp sieht so aus ...

C-/C++-Quelltext

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

int WINAPI DllMain(HINSTANCE handle, DWORD reason, LPVOID reserved)
{
  return 1;
}

void message()
{
 MessageBox(NULL, "Funktionierts?", "Information", MB_ICONINFORMATION | MB_OK);
}



und meine ddl.h sieht so aus...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#include <windows.h>
#ifdef DLL_EXPORTS
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif

void DLL message();


und meine project.cpp

C-/C++-Quelltext

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

#ifdef _DEBUG
#pragma comment (lib, "..\\debug\\dll.lib")
#else
#pragma comment (lib, "..\\release\\dll.lib")
#endif

int WINAPI WinMain(HINSTANCE instance, HINSTANCE prev_instance,
                   char* command_line, int show_command)
{
   message();
   return 0;
}



das sieht irgent wie ganz anders aus als bei dir ???

also ich muss jetzt einfach in der projekt.cpp so die funktion aufrufen:

message(const char* pcMsg);

Und in der variable pcMsg steckt z.b ein wort oder so?

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

12

06.04.2008, 15:25

wie gesagt, du kannst einfach deiner funktion einen parameter geben (bei mir jetzt halt pcMsg vom typ const char*, kannst aber auch string nehmen), und danach die funktion mit dem parameter aufrufen.

13

06.04.2008, 15:38

irgent wie wills immer noch nicht funktionieren...

meine dll.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include <windows.h>

#ifdef DLL_EXPORTS
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif

void DLL message(const char* pcMsg);


Und meine dll.cpp:

C-/C++-Quelltext

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

int WINAPI DllMain(HINSTANCE handle, DWORD reason, LPVOID reserved)
{
  return 1;
}

void message(const char* pcMsg)
{
     MessageBox(NULL, pcMsg, "Information", MB_ICONINFORMATION | MB_OK);
}


Und natürlich auch meine project.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "..\\DLL\\dll.h"
const char* pcMsg = aaa;

#ifdef _DEBUG
#pragma comment (lib, "..\\debug\\dll.lib")
#else
#pragma comment (lib, "..\\release\\dll.lib")
#endif

int WINAPI WinMain(HINSTANCE instance, HINSTANCE prev_instance,
                   char* command_line, int show_command)
{
   message(const char* pcMsg);
   return 0;
}



So meintest du das doch mit dem parameter übergeben?

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

14

06.04.2008, 16:07

du machst den aufruf der funktion falsch:

Zitat von »"Dustin Braun"«

C-/C++-Quelltext

1
message(const char* pcMsg);

du musst die funktion danach mit einem parameter aufrufen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
// moeglichkeit 1, fester wert uebergeben

message("hallo welt");

// moeglichkeit 2, mit variable

char[] acMsg = "hallo welt zum 2.";
message(acMsg);

// sonstige moeglichkeiten werden jetzt nicht gezeigt, gibt aber sicher noch...


ich frage mich gerade, wie gut das du c++ überhaupt kannst :? :?
weisst du überhaupt, wie in c/c++ ein funktionsaufruf funktioniert :?:

15

06.04.2008, 16:21

ne, das hatte mich isher nicht wirklich interesiert :/

Aber, wenn ich nun mit der ersten möglichkeit übergebe:

C-/C++-Quelltext

1
2
// moeglichkeit 1, fester wert uebergeben

message("hallo welt"); 


Dann muss doch in der dll.cpp irgent eine variable hin stadt acMsg, weil sie ja nicht existiert.

Aber ich übergebe ja bloß einen text, der ja kine variable hat, ich weiß im moment wirklich nicht was da hin müste stadt acMsg:

C-/C++-Quelltext

1
2
3
4
void message()
{
     MessageBox(NULL, acMsg, "Information", MB_ICONINFORMATION | MB_OK);
}

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

16

06.04.2008, 16:33

mein vorheriger post bezog sich auf dein project.cpp. deine dll war soweit ok.

ich rate dir jedoch, mit dlls noch zu warten, wenn du noch nicht mal richtig c++ kannst. du solltest zumindest mal ein paar gute tutorials durchlesen, oder dir ein buch kaufen ( :arrow: z.B. "C++ für Spieleprogrammierer")

17

06.04.2008, 16:37

Was C++, bzw die WinAPI angeht behersche ich ja das meiste, nur halt von ein paar dingen wie diese habe ich kein plan^^

Meine Bücher:

-Windows Programmieren (Charlez Petzold)
-3d spieleprogrammierung mit directx und c++
-3d spieleprogrammierung mit directx und c++ (in 21 Tagen)

Und a dem zweiten Buch bin ich noch dran^^

Eigentlich steht ja auch in meinem Petzold was über dll's, nur leider hab ichs gerade verlegt, denn sonst würde ich ganz einfach da hinein schauen^^

Ich vermute mal das ich gleich noch ne Frage hab^^

18

06.04.2008, 16:47

Ne, geht leider immer noch nicht (Ich versuche es liebermit der variable, denn wenn ich das hin bekommen hab, ist das alles was ich wegen DLL's wissen wollte)

Also, ih bekomme ne error message:

Zitat

Der Prozzedureinsprungspunkt "?message@YAXXZ" wurde in der DLL "DLL.dll" nicht gefunden

Also, den error hab ich noch nie gesehen xD


Das läßt mich darauf schließen das irgent was noch immer falsch ist:

Die Project.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "..\\DLL\\dll.h"
const char* pcMsg = aaa;

#ifdef _DEBUG
#pragma comment (lib, "..\\debug\\dll.lib")
#else
#pragma comment (lib, "..\\release\\dll.lib")
#endif

int WINAPI WinMain(HINSTANCE instance, HINSTANCE prev_instance,
                   char* command_line, int show_command)
{
   char[] acMsg = "hallo welt zum 2.";
message(acMsg);

   return 0;
}


Die dll.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include <windows.h>

#ifdef DLL_EXPORTS
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif

void DLL message(const char* acMsg);


Und natürlich die dll.cpp:

C-/C++-Quelltext

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

int WINAPI DllMain(HINSTANCE handle, DWORD reason, LPVOID reserved)
{
  return 1;
}

void message(const char* acMsg)
{
     MessageBox(NULL, acMsg, "Information", MB_ICONINFORMATION | MB_OK);
}


Also, ich weiß jetzt nicht ob das un erwünscht ist, hier im forum, aber ich frage einfach mal:

Könntest du mir eventuell den Code so umschreiben das er funktioniert, dann werdeich dich auch in ruhe lassen xD

lso, wenn ihs ehe wie das richtig funktioniert kann ich nen wenig experimentieren, und mich interessiert ja bloß wie ich eine variable übergeben kann :/

Ich währe dir echt dankbar!

19

06.04.2008, 16:53

Zitat von »"Dustin Braun"«

Was C++, bzw die WinAPI angeht behersche ich ja das meiste, nur halt von ein paar dingen wie diese habe ich kein plan^^

Funktionsaufrufe zählen aber zu den absoluten Grundlagen von C++; also lern erstmal vernünftig C++, bevor du so sachen versuchst und uns mit Fragen kommst, die dann eigentlich klar wären...

@Topic: du hast in dll.cpp das DLL im Funktionskopf vergessen...

20

06.04.2008, 17:15

OK, ich habe mich mal ein wenig schlau gemacht und versucht es für dieses problem um zu setzen, aber es macht weiterhin die Header datei prblehme:

Als erstes Deklariere ich eine Funktion (in der header datei), dabei muss angegeben werden, was für einen typ von Parameter die annimmt, in diesem falle ein integer:

C-/C++-Quelltext

1
void DLL message(int);


Und in der dll.cpp, ist ja die Funktion versteckt. Ich muss ihr mitteilen, das der Parameter in einen integer namens "b" gepackt wird.

C-/C++-Quelltext

1
2
3
4
5
void message(int b)
{
    sprintf(acA, "Wert: %i", b);
     MessageBox(NULL, acA, "Information", MB_ICONINFORMATION | MB_OK);
}


Und beim aufruf der Funktion, übergebe ich einfach nur den Wert:

C-/C++-Quelltext

1
2
int b = 9;
message(b);


sollte doch eigentlich funktionieren, oder etwa nicht? Tuts aber nicht :/

Das mit den unktionen habe ich ja schon eigentlich kappiert, das problem ist halt, das ich funktionen bisher nur in einund der selben datei aufgerufen und die funktion ebendfalls in der seben datei war. jetzt geht es ja aber über so eine Header datei, und das kapiere ich halt nicht ...

Werbeanzeige