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

31.12.2007, 00:32

Naja vllt wäre es auch ganz gut mal den Header einzubinden, in dem die Deklaration der Klasse ist ... nur vllt fällt dir dann auf, dass das ein wenig doof ist, weil da ja noch steht, dass die Klasse exportiert werden soll! Dafür gibt es dann so tolle Makros, die dann, wenn du die Headerdatei einbindest und nicht sagst, dass bei dem Build alles exportiert werden soll, alles importiert werden soll!!! :)

C-/C++-Quelltext

1
2
3
4
5
#ifdef FOO_EXPORTS
#define FOO_API __declspec(dllexport)
#else // !FOO_EXPORTS

#define FOO_API __declspec(dllimport)
#endif // FOO_EXPORTS
soo sieht das Makro aus ... ehm kannst natürlich auch andere Namen nehmen. Auf jedenfall gehst du jetzt hin und weißt beim Builden darauf hin, dass FOO_EXPORTS definiert sein soll (in der DLL) und wenn du den Header dann nachher wieder "inkludierst", darf FOO_EXPORTS natürlich nicht definiert sein.

Am einfachsten legst du für die DLL einen gemeinsamen Header ein, der alle anderen Header einbindet.
foo.hpp (FOO_EXPORTS definiert!)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#if !defined(FOO_HPP__INCLUDED)
#define FOO_HPP__INCLUDED

#if (_MSC_VER >= 1300)
#pragma once
#endif // (_MSC_VER >= 1300)



// Export Makro

#ifdef FOO_EXPORTS
#define FOO_API __declspec(dllexport)
#else // !FOO_EXPORTS

#define FOO_API __declspec(dllimport)
#endif // FOO_EXPORTS


// DLL-Headers

#include "print_int.hpp"

#endif // FOO_HPP__INCLUDED


print_int.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#if !defined(PRINT_INT_HPP__INCLUDED)
#define PRINT_INT_HPP__INCLUDED

#if (_MSC_VER >= 1300)
#pragma once
#endif // (_MSC_VER >= 1300)


#include <iostream>

struct FOO_API print_int
{
    int data;
    print_int(int const& data) 
        : data(data)
    {}

    friend std::ostream& operator<<(std::ostream& out, print_int const& data)
    { out << data.data; }
};

#endif // MY_CLASS_HPP__INCLUDED
Wenn print_int jetzt im Sourcefile die Implementierung hätte, würdest du dort ausschließlich foo.h einbinden, nicht print_int.h!

Genutzt dann einfach (FOO_EXPORTS nicht definiert!):

C-/C++-Quelltext

1
2
3
4
5
6
7
#include <foo.h>
#include <iostream>

int main()
{
    std::cout << print_int(10) << std::endl;
}
.

So das sollte reichen ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

12

31.12.2007, 11:16

Zitat von »"Mr. Data"«


Trotzdem danke für den Tipp mit dem

C-/C++-Quelltext

1
 extern "C"


leider funktioniert es trotzdem nicht[/cpp]


Bitte, ich sagte ja nicht dass das die Ursache ist, sondern nur das extern "C" an dieser Stelle schlichtweg falsch ist! :)
@D13_Dreinig