|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Cybermonkey342
Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 22.08.2015, 22:45 Titel: Type Mismatch beim Kompilieren unter Windows |
|
|
Hallo miteinander,
ich bin im Moment dabei, mein Spiele-Framework Pulsar2D (für SDL2) von FreePascal auf FreeBASIC zu portieren. Unter Linux läuft alles einwandfrei. Ich kann mir allerdings den Type Mismatch Fehler unter Windows nicht erklären.
Ich habe einen namespace p2d in der Include-Datei und lege darin unter anderem folgende Funktion an (Prototyp):
Code: | declare function loadimage (filename as string) as SDL_Surface ptr |
Im fertigen Programm nutze ich using p2d, um auf die Funktionen zuzugreifen. (Dass ich bei meiner color oder circle Funktion dann trotzdem p2d.color schreiben muss leuchtet mir noch ein). Ich lade also eine Image-Datei:
Code: | image = loadimage ("media/sprite.bmp") |
und erhalte diesen Compiler-Fehler (nur unter Windows!):
Zitat: | p2dtest.bas(25) error 57: Type mismatch, at parameter 1 of LOADIMAGEA() in 'image = loadimage ("media/sprite.bmp")' |
Vor allem frage ich mich, wie der compiler auf LOADIMAGEA kommt ...
Schreibe ich
Code: | image = p2d.loadimage ("media/sprite.bmp") |
klappt alles auch. Mir ist aber nicht bewusst, dass es in FreeBASIC eine vorhandene Funktion gäbe, die LOADIMAGE heißt, vor allem klappt das Kompilieren ja unter Linux einwandfrei. Kann es daran liegen, dass er unter Windows auf die WinAPI zugreift?
Ach so, der Compiler ist FBC 1.03.0 in 32 Bit auf Windows 7 64 Bit. _________________ Mit besten Grüßen,
Cybermonkey |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 23.08.2015, 00:05 Titel: |
|
|
LoadImage ist auch eine WinAPI-Funktion, und das Problem bei den WinAPI-Headern (auch in anderen Sprachen) ist dass der UNICODE-Switch über den Präprozessor umgelegt wird, und dann #define LoadImage LoadImageA oder halt #define LoadImage LoadImageW verwendet wird und dementsprechend eine Textersetzung von LoadImage zu einer der beiden Varianten stattfindet.
Bei dem voll qualifizierten Namen greift diese Textersetzung nicht, deswegen hast du in dem Fall kein Problem. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Cybermonkey342
Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 23.08.2015, 12:29 Titel: |
|
|
Ah, ok, vielen Dank. Liegt also doch an der WinAPI. Bei FreePascal hatte ich das Problem nicht ...
Ich habe nun folgendes in meiner Haupt-Include-Datei eingefügt:
Code: | #ifdef __FB_WIN32__
#undef LOADIMAGEA
#undef SetActiveWindow
#undef DRAWTEXTA
#undef CLOSEWINDOW
#undef RECTANGLE
#endif
#undef circle
#undef color
#undef line
|
Danach kann ich meine Funktionen ohne Probleme nutzen, auch color, circle und line. Das könnte u.U. gefährlich werden, aber mal sehen... Normalerweise braucht man ja weder auf die WinAPI noch auf die fbgfx zugreifen, wenn man SDL2 nutzt.
P.S. Wenn ich etwas weiter mit dem Port bin, werde ich Pulsar2D mal unter den Projekten vorstellen. _________________ Mit besten Grüßen,
Cybermonkey |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 23.08.2015, 13:42 Titel: |
|
|
Cybermonkey342 hat Folgendes geschrieben: | Normalerweise braucht man ja weder auf die WinAPI noch auf die fbgfx zugreifen, wenn man SDL2 nutzt. |
Dann solltest du mal rausfinden wo überhaupt die Windows.bi inkludiert wird - weil von selbst tut FreeBASIC das nicht.
#undef LOADIMAGEA macht übrigens keinen Sinn, damit machst du die Funktion unbenutzbar, #undef LoadImage wäre sinnvoller - und dann eben erst danach deine eigene .bi includen, die LoadImage definiert. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Cybermonkey342
Anmeldungsdatum: 21.02.2015 Beiträge: 16 Wohnort: Freiburg
|
Verfasst am: 23.08.2015, 15:44 Titel: |
|
|
Danke für den Hinweis. Tatsächlich wird Windows.bi von SDL2 inkludiert. Aber ich mache das jetzt so, erst SDL2 inkludieren und LoadImage (und die anderen "doppelten" Funktionen) undefinieren und dann die .bi mit meinen Definitionen inkludieren. _________________ Mit besten Grüßen,
Cybermonkey |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|