GDI+
-
Ok danke alle
Werd das jetzt mal ausprobieren .. diese GdiPlus.dll hab ich letztendlich gefunden
in einem Ordner namens:
\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.10.0_x-ww_712befd8\und noch einmal in einem ähnlichen Ordner .. beide haben unterschiedliche Größen was mich verwirrt aber gut .. ich nehm die größere, die hat ein neueres Erstellungsdatum!
Problem: "implib.exe" funktioniert dennoch nicht
Bekomm wieder drei Fehlermeldungen!
Befehlszeile: implib GdiPlus.dll @Gdi.txt
Habs auch schon mit @Gdi.lib ausprobiert aber selbes Problem!Das mit COFF2OMF probier ich gleich mal
-
Das Prog COFF2OMF funkst wenigstens :D!
Also, habs ausprobiert:
Input Datei ist die "GdiPlus.lib" die 202 KB groß ist.
Output Datei hab ich "PlusGdi.lib" angegeben die nach der convertierung 49 KB klein ist.
Aufruf: coff2omf GdiPlus.lib PlusGdi.libIch hab das jetzt drei Mal ausprobiert. Beim zweiten und dritten Versuch hab ich alles in einen Ordner gepackt - die ganzen .h Dateien und die .lib, was nichts geändert hat.
Die .h Dateien bleiben ja dabei unverändert und beim Ausprobieren hab ich dann die "gdiplus.h" eingebunden was wieder zu "einer" Fehlermeldung in einer .h Datei geführt hat .. was muss ich mit den .h Dateien machen?
-
Du müsstest vor allem mal nicht nur die Zahl der Fehlermeldungen mitteilen sondern auch, welche Fehler auftreten!
-
Also mit
implib gdiplus.lib gdiplus.dll
erstellt mir IMPLIB astrein ne LIB, ohne Probleme. Mußt nur noch checken ob Du eine der Optionen brauchst.
-a Add '_' alias for MS flavor cdecl functions -c Case sensitive symbols -f Force imports by name (with hints) -w No Warnings
Ich meine, bei meinen Versuchen damals brauchte ich die nicht.
-
Hehe .. gut in der Help vom Borland über IMPLIB steht eine bisschen andere Syntax von den Parametern aber vielleicht hab ich auch nur mal wieder was falsch verstanden ;)!
Funktioniert bei mir mit der Befehlszeile auch.. danke!
Naja, wie gehts jetzt weiter? Mit den .h Files kann ich leider auch nicht viel anstellen weil der Borland immernoch Fehler bringt - muss ich die auch irgendwie umwandeln oder so?
@Jansen
Hab ich mir auch schon überlegt ob es nicht besser wäre die Fehlermeldungen hin zu schreiben aber ob das Hilft:
"Es ist ein schwerer Ausnahmefehler aufgetreten!":p
-
Beim Builder 6 sind Headerfiles für GDIPlus mit dabei. Findest Du im Include Verzeichniss. Relevant ist wohl nur die gdiplus.h, da diese die anderen gdi*.h Files mit einbindet.
-
hm, dann hampelst du aber auf ne Header rum, die nicht der lib entspricht. Es sei denn du kannst garantieren, dass die Dateien der selben Version angehören.
Ich glaub kaum, dass das funzt.Das muss doch auch mit der Original gehen.
Kann es sein, dass du noch eine dll mehr brauchst ?
-
Hmm ok jetzt bin ich wieder verwirrt!!
Also ich versuch mal zusammen zu fassen:
Borland erstellt .h Files für GDI+, aber konvertiert die .lib von Microsoft nicht so, dass man GDI+ im Borland nutzen kann. Wenn man nun GDI+ benutzten will muss .man die .lib / .dll von Microsoft konvertieren wozu das nützliche Tool "implib.exe" da ist!? Mit dem Problem das die konvertierte .lib nicht funktioniert und ich Fehler in einer .h File bekomm von undefinierten Funktionsaufrufen (Funktionen: Min(), Max()).Naja, vielleicht benötigt man noch eine .obj??
Hab mal im \Lib\ Ordner vom Builder geschaut und ist zu ein paar .lib Files eine entsprechende .obj zu finden.
Auf jedenfall hatte ich noch keinen Erfolg ...
-
Ich kann Dir jetzt leider nicht mehr arg viel weiter helfen
Das damalige Projekt, indem ich GDIPlus zur Anzeige von TIF Dateien verwendet habe, mußte leider einem dringenderen größeren Projekt weichen. Hab aber mal geschwind reingeschaut, ich habe die GDIPlus.h von Borland includet (#include <GDIPlus.h> ) und ne GDIPlus.lib, durch IMPLIB erstellt, ins Projekt eingebunden. Muß aber dazu sagen, nix XP sondern W2K. Die Anzeige der TIFs hat jedenfalls prima funktioniert sogar mit Zoom und drehen und all dem ganzen Kram
-
Nachdem einige Zeit vergangen ist und viele Versuche von mir in die Hose gegangen sind .. will ich nochmal nachhaken ;)!
Also ich erstelle mit IMPLIB aus der GdiPlus.dll eine GdiPlus.lib, die ich dann in mein Projekt mit einbinde oder hinzufüge?! Dann binde ich noch die GdiPlus.h von Borland mit ein und bekommen 24 Fehlermedlungen wobei die meisten "Aufruf einer undefinierte Funktion: Min() / Max()" sind.
Oder: Ich erstelle mit COFF2OMF aus der GdiPlus.lib eine umgewandelte GdiPlus.lib und binde die ein / füge diese zum Projekt hinzu?! Dann binde ich wieder die GdiPlus.h von Borland mit ein und bekomm immernoch 24 Fehlermeldungen wobei die meisten wieder "Aufruf einer undefinierten Funktion: Min() / Max()" sind.Mach ich irgendwas falsch?
Auf der Borland Homepage hab ich leider auch vergeblich nach einer Lösung gesucht .. die verlieren darüber in der ganzen Community und FAQ kein einziges Wort .....!
-
hallo,
ich will ja nicht sticheln, aber:
Peter schrieb:
Doch, die GDI+ hab ich selber schon verwendet. Funktioniert gut.@peter: damit dieser thread nicht noch mehr ausartet, zeig ihm doch endlich wie du es fertig gebracht hast, die gdi+ gut zu verwerden!!!
mfg
murph
-
Bis auf 4 Seiten schaffen wir das noch
!!
Ne, wäre nett wenn du mir genau sagen könntest was du wie eingebunden / hinzugefügt hast Peter !?
Hab immernoch keine Lösung gefunden .. aber das Borland darüber kein Wort verliert find ich krass !! (naja, vielleicht hab ich wieder mal was übersehen ;))
-
So, ich hab mich jetzt extra mal hingesetzt und versucht, ein kleines Beispiel zu basteln (Laden eines Bildes in eine Paintbox). Man braucht eine Form (TForm1), eine PaintBox (PaintBox) drauf und einen Knopf (BShowImage). Ich hoffe, es hilft etwas weiter, aber keine Garantie auf Fehlerfreiheit
H-Datei:
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ExtCtrls.hpp> // ********************** Für die Verwendung von GDIPlus notwendig ****************** #include <algorithm> using std::min; using std::max; #include <GDIPlus.h> // Eintrag unter Projekt -> Optionen -> Verzeichnisse -> Bedingungen // Im Editfeld Definition der Groupbox Bedingungen = STRICT;_DEBUG // Die Compiler Warnung // W8022 'Bitmap:Clone(const Rect &int)' verbirgt virtuelle Funktion 'Image:Clone()' // habe ich in Projekt -> Optionen -> Compiler -> Warnungen unterdrückt // ********************************************************************************** //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *BShowImage; TPaintBox *PaintBox; void __fastcall BShowImageClick(TObject *Sender); private: // Anwender-Deklarationen ULONG_PTR gdiplusToken; Gdiplus::GdiplusStartupInput gdiplusStartupInput; int GDIPlusStatus(Gdiplus::Image *GDIPlusImage); bool LoadPic(AnsiString PicName); public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); __fastcall ~TForm1(void); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
CPP-Datei:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); } //--------------------------------------------------------------------------- __fastcall TForm1::~TForm1(void) { Gdiplus::GdiplusShutdown(gdiplusToken); } //--------------------------------------------------------------------------- void __fastcall TForm1::BShowImageClick(TObject *Sender) { TOpenDialog *OpenDiag=new TOpenDialog(NULL); if(OpenDiag->Execute()) LoadPic(OpenDiag->FileName); delete OpenDiag; } //--------------------------------------------------------------------------- int TForm1::GDIPlusStatus(Gdiplus::Image *GDIPlusImage) { int status; AnsiString Status; switch((status=GDIPlusImage->GetLastStatus())) { case Gdiplus::Ok : Status=""; break; case Gdiplus::GenericError : Status="Unbekannter Fehler (GenericError)"; break; case Gdiplus::InvalidParameter : Status="Ungültiger Parameter (InvalidParameter)"; break; case Gdiplus::OutOfMemory : Status="Ungenügend Speicher (OutOfMemory)"; break; case Gdiplus::ObjectBusy : Status="Graphics Objekt busy (ObjectBusy)"; break; case Gdiplus::InsufficientBuffer : Status="Ungenügend Objektpuffer (InsufficientBuffer)"; break; case Gdiplus::NotImplemented : Status="Nicht implementierte Funktion (NotImplemented)"; break; case Gdiplus::Win32Error : Status="Win32Error (Win32Error)"; break; case Gdiplus::WrongState : Status="Objekt befindet sich in einem falschen Status (WrongState)"; break; case Gdiplus::Aborted : Status="Die Methode wurde abgebrochen (Aborted)"; break; case Gdiplus::FileNotFound : Status="Die Datei konnte nicht gefunden werden (FileNotFound)"; break; case Gdiplus::ValueOverflow : Status="Nummerischer Überlauf (ValueOverflow)"; break; case Gdiplus::AccessDenied : Status="Kein Zugriff (AccessDenied)"; break; case Gdiplus::UnknownImageFormat : Status="Unbekanntes Bildformat (UnknownImageFormat)"; break; case Gdiplus::FontFamilyNotFound : Status="Unbekannter Fontfamilie (FontFamilyNotFound)"; break; case Gdiplus::FontStyleNotFound : Status="Unbekannter Fontstil (FontStyleNotFound)"; break; case Gdiplus::NotTrueTypeFont : Status="Kein Truetype Font (NotTrueTypeFont)"; break; case Gdiplus::UnsupportedGdiplusVersion : Status="Nicht unterstützte GDI-Plus Version (UnsupportedGdiplusVersion)"; break; case Gdiplus::GdiplusNotInitialized : Status="GDI-Plus nicht initialisiert (GdiplusNotInitialized)"; break; case Gdiplus::PropertyNotFound : Status="Eigenschaft nicht gefunden (PropertyNotFound)"; break; case Gdiplus::PropertyNotSupported : Status="Eigenschaft nicht unterstützt (PropertyNotSupported)"; break; default : Status="Unbekannter Fehler"; } if(status != Gdiplus::Ok) Application->MessageBox(Status.c_str(), "GDIPlus", MB_ICONEXCLAMATION); return status; } //--------------------------------------------------------------------------- bool TForm1::LoadPic(AnsiString PicName) { TRect rect; int wPicNameLen; wchar_t *wPicName; bool res=false; Gdiplus::Image *GDIPlusImage; Graphics::TBitmap *GraphicsBitmap; wPicName=new wchar_t[(wPicNameLen=PicName.WideCharBufSize())]; GDIPlusImage=new Gdiplus::Image(PicName.WideChar(wPicName, wPicNameLen)); GraphicsBitmap=new Graphics::TBitmap(); if(GDIPlusStatus(GDIPlusImage)==Gdiplus::Ok) { GraphicsBitmap->Width=GDIPlusImage->GetWidth(); GraphicsBitmap->Height=GDIPlusImage->GetHeight(); Gdiplus::Graphics(GraphicsBitmap->Canvas->Handle, GraphicsBitmap->Handle).DrawImage(GDIPlusImage, 0, 0, GraphicsBitmap->Width, GraphicsBitmap->Height); rect.left=0; rect.top=0; rect.right=PaintBox->Width; rect.bottom=PaintBox->Height; PaintBox->Canvas->Brush->Color=clWhite; PaintBox->Canvas->FillRect(rect); PaintBox->Canvas->CopyRect(rect, GraphicsBitmap->Canvas, rect); res=true; } delete GraphicsBitmap; delete GDIPlusImage; delete wPicName; return res; } //---------------------------------------------------------------------------
Die GDIPlus.dll habe ich ins Projektverzeichniss kopiert (Win 2000), die LIB per IMPLIB aus der DLL erzeugt und auch mit ins Projektverzeichniss gepackt.
Der Befehl zum Erzeugen der LIB:
implib gdiplus.lib gdiplus.dll
Die LIB muß natürlich dem Projekt hinzugefügt werden.PS: Hatte keinen Bock alles ausführlich zu dokumentieren, aber ich glaube so schwierig ist es nicht sich damit zurecht zu finden, oder
[ Dieser Beitrag wurde am 29.06.2003 um 17:32 Uhr von Peter editiert. ]
-
Peter, alter Haudegen
Interesant. Hatte ich noch nie ausprobiert.
[ Dieser Beitrag wurde am 29.06.2003 um 17:52 Uhr von AndreasW editiert. ]
-
Hi Andreas
Jou, GDIPlus ist recht interessant. Hatte die vor einiger Zeit entdeckt als es darum ging, TIF Dateien anzuzeigen. Leider konnte ich an dem damaligen Projekt nicht dran bleiben, da was anderes in der Prioritätenliste ganz vorne auftauchteAber ich bin mir sicher, irgendwann kommt das Thema wieder hoch
-
Original erstellt von Peter:
Leider konnte ich an dem damaligen Projekt nicht dran bleiben, da was anderes in der Prioritätenliste ganz vorne auftauchteohhh ja, das kommt mir sehr bekannt vor...
-
Was ist denn nun?
Erst drängeln sie, dann opfert Peter seinen Sonntag und jetzt gibt's hier keine Rückmeldungen!?
-
Dann wirds wohl doch nicht sooo dringend gewesen sein, sind ja jetzt immerhin 2 Monate vergangen :D:D:D