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

1

28.08.2008, 18:18

Template - Methode in DLL

Hi,

ich habe ein Problem. Warum bekomme ich nen link Fehler

Quellcode

1
error LNK2019: unresolved external symbol "public: class WinGui::Button * __thiscall WinGui::Window::add_element<class WinGui::Button>(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &,unsigned int,unsigned int,unsigned int,unsigned int,unsigned long,unsigned long (__cdecl*)(void),bool)" (??$add_element@VButton@WinGui@@@Window@WinGui@@QAEPAVButton@1@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@IIIIKP6AKXZ_N@Z) referenced in function _WinMain@16)

wenn ich die Funktion aus ner DLL aufruf?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<typename T>
    T *Window::add_element (const std::wstring &Text,
                            unsigned int x, unsigned int y,
                            unsigned int Width, unsigned int Height,
                            unsigned long ID,
                            unsigned long (*command)(),
                            bool Ownerdraw)
    {
        T *pElement = new T;

        if (FAIL(pElement->create (Text, x, y, Width, Height, m_Window, ID, m_Instance, command, Ownerdraw)))
            return NULL;

        m_Elements->push_back (reinterpret_cast<Element*>(pElement));

        return pElement;
    }


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
class WINGUI_API Window
    {
    public:
template<typename T>
        T *add_element (const std::wstring &Text,
                        unsigned int x, unsigned int y,
                        unsigned int Width, unsigned int Height,
                        unsigned long ID,
                        unsigned long (*command)()=NULL,
                        bool Ownerdraw = false);
};


PS: Ja, es ist alle richtig gelinkt.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

28.08.2008, 19:11

was meinst du mit "aus ner dll aufruf"!?

meines wissens nach kannst du maximal explizite instanzierungen eines templates in einer dll exportieren. und auch das geht nur mit den entsprechenden microsoft spezifischen erweiterungen (__declspec(dllexport/import) etc.)

bedenke: templates sind statisch. wie willst du denn zur laufzeit dynamisch ein template instanzieren!?

3

28.08.2008, 19:33

Das heißt Template - Funktionen in dlls = unmöglich?
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

4

28.08.2008, 19:40

Hm nja eigtl. schon weil die zur Compilerzeit und nicht zur Linkzeit ausgewertet werden ...
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

5

28.08.2008, 19:47

Mist, mein schöner Ansatz^^

Ist die STL dann also ne statische Bibliothek oder hat die Sonderrechte?
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

28.08.2008, 19:51

Zitat von »"Anfänger"«

Das heißt Template - Funktionen in dlls = unmöglich?


wie ich sagte. template spezialisierungen sollten iirc möglich sein, aber ein reines template kann man nicht in eine dll exportieren. das is schon rein logisch nicht möglich.

7

28.08.2008, 19:53

ok, danke^^
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

28.08.2008, 20:02

Zitat von »"Anfänger"«

Mist, mein schöner Ansatz^^

Ist die STL dann also ne statische Bibliothek oder hat die Sonderrechte?


Es gibt keine Sonderrechte! :shock:
@D13_Dreinig

9

28.08.2008, 20:06

Der Compiler hat ja auch das Sonderrecht den Konstruktor direkt aufrufen zu dürfen^^
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

28.08.2008, 20:12

Der Compiler ist ja auch der, der C++ umsetzt.

Die STL liegt auch nicht in einer DLL...die STL is in ganz normalem C++ geschrieben. Du kannst dir den Code sogar anschauen...

Werbeanzeige