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

bepo

Frischling

  • »bepo« ist der Autor dieses Themas

Beiträge: 33

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

1

15.08.2004, 16:22

Unaufgelöstes Symbol bei Inline-Funktionen in DLL's

Ich habe eine Dll erstellt, in der die Klasse CDirect3D ist, die einige inline-Funktionen hat. Diese Funktionen verursachen, dass der Kompiler eine Fehlermeldung ausgibt, dass m_pD3DDevice(und alle anderen Variablen die inline verwendet werden) nicht aufgelöst ist. Sind die inline-Funktionen jedoch nicht inline-deklariert, tritt der Fehler nicht auf.

In der Direct3D.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
class __declspec(dllexport) CDirect3D
{
public:
    ...
    static inline void BeginScene()       { m_pD3DDevice->BeginScene(); }
    static inline void EndScene()         { m_pD3DDevice->EndScene(); }
    ...
protected:
    static PDIRECT3D9 m_pDirect3D;
    static PDIRECT3DDEVICE9 m_pD3DDevice;
};

2

16.08.2004, 13:20

Vorweg:
Habe deinen Titel umbenannt. Denn "dll" ist weder aussagekräftig noch auf irgendweine weise Intelligent. Bitte beim nächsten mal einen besseren Titel wählen.


So nun zum Problem:
Das ist eigentlich kein Problem, sondern eine Wissenslücke. Das ist doch klar das du diese Fehlermeldung bekommst. Eine Inline-Funktion wird nicht aufgerufen sondern in den Code eingebettet. Ich schlage vor das du dir einmal dein C oder C++ Buch noch mal zur Brust nimmst und dir Inline-Funktionen noch mal zu gemüte führst.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

AC

Frischling

  • Private Nachricht senden

3

16.08.2004, 16:04

Zitat von »"DragonMaster"«

So nun zum Problem:
Das ist eigentlich kein Problem, sondern eine Wissenslücke. Das ist doch klar das du diese Fehlermeldung bekommst. Eine Inline-Funktion wird nicht aufgerufen sondern in den Code eingebettet. Ich schlage vor das du dir einmal dein C oder C++ Buch noch mal zur Brust nimmst und dir Inline-Funktionen noch mal zu gemüte führst.


so wie ich das verstanden habe tritt der fehler doch beim kompilieren der DLL auf ? bei einer statisch gelinkten DLL funktionieren inline funktionen doch ? oder hat das wieder damit zu tun, dass es sich um member funktionen handelt ?

4

16.08.2004, 19:28

Genau weis ich das nicht. Es wäre schön wenn er das dabei geschrieben hätte. Aber ob nun beim kompilieren einer DLL oder bei ner EXE die die DLL verwendet ist es egal.

Wie schon gesagt wird der Code der Inline-Funktion nicht aufgerufen sondern in den Code eingebettet. Daher auch Verständnissproblem.
Zur Aufklärung. Der Linker macht folgenden aufruf:

C-/C++-Quelltext

1
2
3
4
5
static inline CDirect3D::BeginScene() { m_pD3DDevice->BeginScene(); }

// wird zu


m_pD3DDevice->BeginScene();

Aber das Symbol m_pD3DDevice existiert ja nicht, sondern nur das Symbol CDirect3D::m_pD3DDevice.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

bepo

Frischling

  • »bepo« ist der Autor dieses Themas

Beiträge: 33

Wohnort: Bayern

Beruf: Schüler

  • Private Nachricht senden

5

16.08.2004, 21:24

oh, entschuldigung,
irgendwie hab ich noch dass 'im Projekt' wieder gelöscht.

Werbeanzeige