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

04.07.2004, 15:02

dll-problem

ich habe eine dll erstellt, doch wie binde ich sie richtig in ein projekt ein? der kompiler gibt immer eine fehlermeldung aus, dass eine *.lib-Datei fehlt. (wie erstelle ich so eine Datei?)

DrthM2001

Alter Hase

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

2

04.07.2004, 15:08

Eine Dll bindet man nicht ein man greift aus dem Programm darauf zu, siehe S 748

Anonymous

unregistriert

3

04.07.2004, 18:34

und wie kann ich dynamisch klassen aus der dll laden???
mit funktionen funzt es nu!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

04.07.2004, 19:01

Mache eine Basisklasse, von der Du alle Klassen ableitest.
Die DLL exportiert dann eine Funktion, die eine der in der DLL implementierten Klassen erzeugt.
Ungefähr so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// in der DLL

class AbgeleiteteKlasse : public Basisklasse
{
...
};

// nur die folgende Funktion ist nach außen hin sichtbar

Basisklasse* CreateNewAbgeleiteteKlasse()
{
    return new AbgeleiteteKlasse;
}

// im Programm

// anstatt: pInstanz = new AbgeleiteteKlasse;

Basisklasse* pInstanz = CreateAbgeleiteteKlasse();

bepo

Frischling

Beiträge: 33

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

5

04.07.2004, 20:45

bei mir sieht des nu so aus, aber da is nochn fehler den ich nicht finde
(Zeile vor 'Print("HALLO!");' Bezeichnerfehler)

die Print(char* pc)-Funktion funktioneirt!

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/* IN DER DLL

#include <windows.h>
#include <stdio.h>

extern "C"
{
    __declspec(dllexport) void Print(char* pc)
    {
        printf("%s\n",pc);
    };

    class CLASS
    {
    };

    class CLASS_A : public CLASS
    {
        public:
            int i;
    };

    __declspec(dllexport) CLASS* CreateNewClass()
    {
        return new CLASS_A;
    };
}
--------------------------------------------------------------------------
*/


// in der exe-datei
#include <windows.h>

class CLASS
{
};

HMODULE hDLL = NULL;
void (__stdcall* pPrint)(char*) = NULL;
CLASS* (__stdcall* pCreateNewClass)() = NULL;

void main()
{
    hDLL = LoadLibrary("dll.dll");
    if(hDLL==NULL) MessageBox(0,"hDLL","Fehler!",MB_OK);

    pPrint = (void(__stdcall*)(char*))GetProcAddress(hDLL,"Print");
    if(pPrint==NULL) MessageBox(0,"pPrint","Fehler!",MB_OK);

    pCreateNewClass = (CLASS*(__stdcall*)())GetProcAddress(hDLL,"CreateNewClass");
    if(pCreateNewClass==NULL) MessageBox(0,"pCreateNewClass","Fehler!",MB_OK);

    CLASS* C = new pCreateNewClass();
    pPrint("HALLO!");

    FreeLibrary(hDLL);
};

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

6

04.07.2004, 21:59

Es muss:

Quellcode

1
CLASS* C = pCreateNewClass();

heißen weil pCreateNewClass(); eine Funktion und kein Typ ist.

bepo

Frischling

Beiträge: 33

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

7

05.07.2004, 14:16

des geht jetzt, allerdings wird aus der *.dll ein CLASS-Zeiger geliefert und nicht ein CLASS_A-Zeiger

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

8

05.07.2004, 14:33

So soll es auch sein (geht auch nicht anders). Der Zeiger ist ein Basisklassenzeiger (CLASS) und zeigt auf die instanz einer abgeleiteten Klasse (CLASS_A).

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

05.07.2004, 14:43

Die Anwendung kann ja CLASS_A gar nicht kennen, es sei denn sie hat die Definition davon - aber dann wäre das Ganze ja eh sinnlos.

bepo

Frischling

Beiträge: 33

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

10

05.07.2004, 15:08

aber wenn ich versuche mit

Quellcode

1
C->i;
auf die Variable zuzugreifen kommt ein Fehler, dass die Klasse keine Variable mit der Bezeichnung i hat.

Werbeanzeige