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

24.04.2012, 19:00

Man muss nicht mal eine eigene Font laden, nur die Default-Font selbst darf nicht "gezeichnet" werden, eine Kopie davon aber sehr wohl.

C-/C++-Quelltext

1
2
3
sf::Font font(sf::Font::getDefaultFont());
sf::Text myText("Default-Font ohne Absturz, aber auch ohne Default.");
myText.setFont(font);

Hab ich schon versucht gleiches Ergebnis gibt nen Crash nach EnterCriticalSection(...).

Ich bin mir auch nicht sicher das es am Font liegt. Wenn ich sf::String sfStr = ... und std::string Str... weglasse kommt kein Fehler.
Wenn ich die 3 Zeilen wieder einkommentiere kommt der Fehler, so wie der Code jetzt ist nicht.

C-/C++-Quelltext

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
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow )
{
    //sf::String sfStr("My Application");
    //std::string Str = sfStr.toAnsiString();

    sf::RenderWindow window(sf::VideoMode(600,400), "");
    //window.setTitle(Str);
    
    sf::Font fnt(sf::Font::getDefaultFont());
    sf::Text text("First Time Test Text");
    text.setFont(fnt);

    while(window.isOpen())
    {
        sf::Event event;
        while(window.pollEvent(event))
        {

            if(event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(text);
        window.display();
    }

    return 0;
}
greate minds discuss ideas;
average minds discuss events;
small minds discuss people.

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

12

24.04.2012, 19:05

Hast du schon im SFML forum geposted? Das sieht nach einem Bug in der SFML aus (evtl ist das der selbe known Bug, der auch den default font crash herbeiruft.
Frag am besten mal Laurent. Der hat oft sofort eine Antwort parat ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

13

24.04.2012, 20:02

Zitat

Mach´s doch statisch. 8|


Damit hat es doch nichts zu tun!
Lesen, dann aufregen.

Wieso aufregen? Ich reg mich auf, dass geglaubt wird, dass ich mich aufregen würde.
Bei Audio gibts zum Beispiel so ein Problem, da klappt es so ziemlich perfekt nur statisch.

MfG
Check

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

24.04.2012, 20:12

Der Destruktur/Konstruktor von sf::String sind in der selben DLL, das ist nicht das Problem (wäre es das, wären DLLs in C++ völlig unbenutzbar ;)).

Darum geht es nicht. Worum es mir ging ist folgendes: sf:: String::toAnsiString() returned offenbar einen std::string by Value. Das kann nur so lange gut gehn, solange dll und exe exakt die gleiche Implementierung von std::string benutzen. Bei der geringsten Abweichung wird das in die Luft fliegen. Und derartige Abweichungen können schon aus nur einem einzelnen unterschiedlichen Compilerflag resultieren.

Natürlich kann man dlls von C++ aus nutzen, aber C++ in der Schnittstelle einer dll ist wie Nitroglycerin ;)

Ich bin mir ziemlich sicher dass das Problem hier aus der Verwendung von toAnsiString() und entsprechender Inkompatibilität der benutzten SFML dll mit der exe (unterschiedliche Compiler oder Flags, z.B. Kombination von Debug exe mit Release dll) resultiert. Darum nochmal die Frage: Warum genau musst du unbedingt toAnsiString() benutzen? Ich seh in der Anwendung keinen unmittelbaren Grund das zu tun. Abgesehen davon: Hast du die SFML selbst kompiliert? Wenn nicht, dann tu das und pass auf die richtige dll/lib mit der richtigen exe zu linken.

Von der SDL würd ich auf jeden Fall abraten. Fix besser deine Probleme mit der SFML ;)

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (24.04.2012, 20:21)


15

24.04.2012, 20:17

Also sollte man deiner Meinung nach Code immer als C-Code in DLLs exportieren?
Oder anders gefragt: Wie soll man sonst C++-Code wiederverwendbar machen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

24.04.2012, 20:19

Also sollte man deiner Meinung nach Code immer als C-Code in DLLs exportieren?
Oder anders gefragt: Wie soll man sonst C++-Code wiederverwendbar machen?

Mir ist nich ganz klar was du damit meinst. C++ in der Schnittstelle einer dll ist rein prinzipiell nicht portabel. Das war noch nie so und daran wird sich wohl auch in nächster Zeit kaum was ändern...

17

24.04.2012, 20:27

Genau das meine ich damit.
Um C++ in der Schnittstelle "portabel" zu machen müsste man also für jeden Compiler eine eigene DLL kompilieren oder was?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

18

24.04.2012, 20:34

Du meinst damit es funktioniert? Ja, natürlich. Nicht nur für jeden Compiler, man brauch sogar für den selben Compiler schon unterschiedliche dlls für unterschiedliche Konfigurationen, genau das ist ja auch das Problem hier...

Meine Empfehlung an den Threadersteller wär wohl, die SFML einfach als statische Bibliothek zu bauen und direkt zur exe zu linken.

19

24.04.2012, 20:50

Problem gelöst habe die falschen Dll´s gelinkt... Wo liegt eigentlich der unterschied ziwschen Debug und Release Dll und ist es sinnvoll von eigenen Dll´s eine Debug/Release Version zu machen?
greate minds discuss ideas;
average minds discuss events;
small minds discuss people.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

20

24.04.2012, 20:58

Wo liegt eigentlich der unterschied ziwschen Debug und Release Dll und ist es sinnvoll von eigenen Dll´s eine Debug/Release Version zu machen?

Der Unterschied liegt normalerweise in der Version der Runtime die gelinked wird und den Optimierungen die durchgeführt werden.
Was die eigenen dlls angeht: Hängt davon ab. Wenn deine dll Schnittstelle C++ enthält, dann brauchst du auf jeden Fall für alle möglichen Buildkonfigurationen eine eigene Version der dll...

Werbeanzeige