Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Type Mismatch beim Kompilieren unter Windows

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Cybermonkey342



Anmeldungsdatum: 21.02.2015
Beiträge: 16
Wohnort: Freiburg

BeitragVerfasst am: 22.08.2015, 22:45    Titel: Type Mismatch beim Kompilieren unter Windows Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 23.08.2015, 00:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cybermonkey342



Anmeldungsdatum: 21.02.2015
Beiträge: 16
Wohnort: Freiburg

BeitragVerfasst am: 23.08.2015, 12:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 23.08.2015, 13:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Cybermonkey342



Anmeldungsdatum: 21.02.2015
Beiträge: 16
Wohnort: Freiburg

BeitragVerfasst am: 23.08.2015, 15:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz