VS v6.0 + SP6 + PSDK 02/2003 = immer noch Fehlermeldung
-
Hallo,
ich veruche verzweifelt meine Anwendung zu Kompilieren. Es erscheint folgende Fehlemeldung:
E:\Programmierung\Test\fonts.c(163) : warning C4013: 'AddFontMemResourceEx' undefiniert; Annahme: extern mit Rueckgabetyp int : : : fonts.obj : error LNK2001: Nichtaufgeloestes externes Symbol _AddFontMemResourceExWie bereits in der Überschrift beschrieben verwende ich VS6 Professional mit Servicepack 6 und der Plattform SDK Februar 2003 (wie oben im Forum verlinkt).
Lade ich die Fontresource mit "AddFontResource(file_name);" die ja auch in der gleichen Headerdatei <Windows.h> includet wird, läßt sich mein Code compilieren. Was mach ich falsch?
-
Riecht ein wenig streng nach dem OpenType Font Embedding SDK.

Guckst du hier: http://www.microsoft.com/typography
-
http://msdn2.microsoft.com/en-us/library/aa383745.aspx beachtet? AddFontMemResourceEx() ist nicht unter Win9x nicht verfügbar.
-
@geeky das mit der Verfügbarkeit der Funktion unter Win9x war mir bekannt, deshalb mache ich an dieser Stelle in meinem Programm auch eine Windowsversionsabfrage und rufe dann je nach Bedarf die Funktion "AddFontMemResourceEx(...)" oder "AddFontResource(...)" auf, ist zumindest geplant :). Irgendwie habe ich das Gefühl dass mein Kompiler, ist übrigens Enterprise Edition nicht Professional wie ich irrtümlich zuerst gepostet habe, die neuinstalliert Platform SDK nicht benutzt sondern die alten LIB und INCLUDE Dateien. Also die Platform SDK hab ich ganz normal über Setup installiert, Vollinstallation um sicher zu gehen dass ich nicht irgendwas wichtiges weglasse und hab dann mit der *.bat Datei die Enviroment Variablen gesetzt. Dann mein Vorhandenes Projekt aufgerufen und versucht zu kompilieren. Hmm warscheinlichj muss ich noch irgendwo eine Einstellung vornehmen, weiss aber leider nicht wo, kann jemand helfen?
-
verzweifelt^2 schrieb:
das mit der Verfügbarkeit der Funktion unter Win9x war mir bekannt, deshalb mache ich an dieser Stelle in meinem Programm auch eine Windowsversionsabfrage und rufe dann je nach Bedarf die Funktion "AddFontMemResourceEx(...)" oder "AddFontResource(...)" auf, ist zumindest geplant :).
Leider bringt das gar nichts. Es geht nicht darum, was du aufrufst, sondern was du linkst. Wenn du eine Versionsabfrage zur Laufzeit machst, sind trotzdem beide Aufrufe in deinem Code vorhanden. Und da die Funktionen durch Load-Time Dynamic Linking eingebunden werden, lässt sich dein Programm nicht mehr unter Win9x starten.
Du musst entweder unterschiedliche Versionen deines Programms bauen (und dazu in der Version, die AddFontMemResourceEx benutzt, geekys Hinweis beachten), oder AddFontMemResourceEx mittels Run-Time Dynamic Linking (LoadLibrary/GetProcAddress) einbinden.
-
Ah.. ok danke da muss ich dann eben 2 Versionen, je eine für Win9x und eine für Win2k und höher compilieren, leider löste das immer nocht nicht das Problem mit der nicht erkannten Funktion.
-
Reihenfolge der Include/Lib Verzeichnisse im VC6 korrekt eingestellt?
-
verzweifelt^2 schrieb:
leider löste das immer nocht nicht das Problem mit der nicht erkannten Funktion.
Hast du _WIN32_WINNT und WINVER so definiert, wie es in geekys Link steht?
-
Also die Eintrage der INCLUDE und LIB Verzeichnisse der Plattform SDK hab ich unter Extras->Optionen->Verzeichnisse so eingestellt, das die Platform SDK Einträge über dnenen von VS6 stehe. Leider vertehe ich den Rest mit den _WIN32_WINNT und WINVER Settings nicht, wo muss ich die vornehmen, muss ich dazu meine*.dwg Datei ändern, sorry dass ich damit nerve aber ich google und klimmpere hier schon Stunden rum.
-
Nehmen wir an du willst für Systeme ab Win2k entwickeln:
#define WINVER 0x0500 #define _WIN32_WINNT 0x500 #include <windows.h>Wichtig ist das die defines vor dem inkludieren der windows.h passiert.
In der Regel wird bei MS-IDEs die windows.h in der stdafx.h eingebunden.
-
Super, vielen Dank für die Antwort, jetzt klappts endlich, happy.
