Zum Inhalt springen

Gateway_man

Mitglieder
  • Gesamte Inhalte

    1.162
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Gateway_man

  1. Exakt das hatte ich ja gehofft. Wie gesagt es geht mir hierbei weniger um eine fertige oder allgemein um die Lösung. Wie ich schon geschrieben hatte ging es mir eher darum wie ihr das angehen würdet. Damit meine ich nicht das komplettieren oder neudefinieren meiner Funktion. Viele Wege führen nach Rom, jedoch hat jeder seine eigenen Vor- und Nachteile. Wie ich bereits erwähnte sind die Kriterien hierfür lediglich die Performance. Klotzkopp hat den Ball schonmal ins Rollen gebracht indem er verschiedene Vorgehensweise erwähnte. Beispielsweise könnte ich für jeden Punkt der übergeben wurde ein Rechteck definieren. Das hatte ich mir auch schon überlegt und es dann wieder verworfen weil es bei vielen Punkten nichtmehr performant wäre. Damit man sich das besser vorstellen kann werde ich jetzt mal die Katze aus dem Sack lassen und den Einsatzzweck dieser Funktion erörtern. (Wobei ich denk das die meisten sich schon vorstellen können worauf das abziehlt). Ich habe ein Modul das Bildschirminhalte überträgt. Ich kämpfe aber momentan noch um Performance. Zu Anfangs hatte ich den kompletten Bildschirminhalt komprimiert übertragen. Das klappte innerhalb eines lokalen Netzes auch wunderbar. Wenn man aber ins WAN wechselt wird das ganze abhängig vom Verbindungspartner sehr langsam. Der Gedanke (der ja an sich schon in vielen Programmen umgesetzt wurde) war das man nur den Bereich sendet der sich geändert hat. Eine solche Funktion würde geschrieben und ist aktiv im Einsatz. Diese ist akzeptabel aber es besteht noch viel Optimierungsbedarf. Ich hatte mich damal entschieden es so einfach wie möglich umzusetzten (aus Zeitgründen). Ich vergleiche lediglich die Bildpunkte beider Bilder. Dann wird eigentlich das gemacht was ich oben bereits erwähnte. Es wird ein Rechteck gebildet von den Punkt in der linken oberen Ecke und dem Punkt in der rechten unteren Ecke. Die Problematik dabei habe ich oben bereits erwähnt aber ich werde Sie anhand des beispiels nochmal erläutern. Stellt euch vor ein Icon im IconTray ändert sich und zur gleichen Zeit selektiert Ihr eine Desktopverknüpfung in der linken oberen Ecke eures Desktops. Das Programm bemerkt es und bildet statt zwei kleiner Rechecke ein riesiges das von der Selektierten Desktopverknüpfung links oben bis runter zu dem Icon im IconTray geht. Das ist natürlich alles andere als optimal. Wie gesagt es geht mir hier weniger um eine Lösung sonder mehr um die verschiedenen Vorgehensweisen. Daher habe ich mich an euch gewendet um mich von euren Vorgehensweisen Inspirieren zu lassen. Ich hatte beispielsweise auch schon die Möglichkeit in Erwägung gezogen die geänderten Bildpunkte einzeln zu übertragen. lg Gateway
  2. Hi, vielen Dank für die Anregungen. Ja den Firmennamen würde ich nur ungern nennen. Aber das Unternehmen hat zwischen 200-300 Mitarbeiter. Es wurde mir gesagt das 20 Prozent Inhouse arbeiten. Mir wurden während des Gespräches einige Kunden aufgezählt (natürlich nur namenhafte xD , sollte ja imposant wirken). Dabei war unter anderem Siemens... Naja ich werd mir das nochmal ganz genau überlegen. Danke nochmals für die Hilfestellung. lg Gateway
  3. Da ich es scheinbar nicht ordentlich rüberbringen kann hab ich mal ein Bild gemalt xD. Siehe Anhang. Nochmals. Es wird der Funktion ein vector mit Bildpunkten übergeben. Die alte Version hat aus diesen Bildpunkten ein Rechteck generiert das alle Bildpunkte beinhaltet. Jetzt schau dir das Bild an und du wirst die Problematik darin erkennen. Es geht darum, das große Bereiche in dem Recheck überflüssig sind da dort keine Bildpunkte liegen. Es sollen also nun statt einem Recheck mehrere Rechtecke gebildet werden um diese Problematik zu umgehen und auch nur die Bereiche zu erhalten in denen Bildpunkte liegen. Das schwarze Rechteck dient als Beispiel für die alte Funktion. Die Funktion nimmt dafür den obersten Punkt in der Linken oberen Ecke und den letzten Punkt in der rechten unteren Ecke. Die neue Funktion soll in dem Beispiel die roten Rechtecke berechnen und zurückgeben. lg Gateway
  4. Gegeben ist zum einen ein Vector vom Typ Point und ein integer Wert welcher die Maximale Reichweite der Bildpunkte definiert. Die Point struktur besteht lediglich aus zwei Ganzahlwerten (X und Y). Das Ergebnis soll ein vector vom typ Rect sein. Die Rect Strukur verfügt über vier Ganzahlwerte (X,Y, Width und Heigth). Die Anforderung ist die ganzen Punkte zu sinvollen Rechtecken zusammenzufassen anstatt ein großes zu definieren. Denn wenn man das Rechteck aus den ganzen Punkten berechnet kann es sein das dabei auch ein großer Bereich im Rechteck erfasst wird der garnicht von Interesse ist. Dabei ist zu beachten das nur die Punkte die übergeben wurden von interesse sind.
  5. Guten Abend, ich sitze gerade an einer Performancekritischen Angelegenheit und könnte geistige Unterstützung benötigen . Es geht um folgendes: Ich habe eine Funktion der ein Vector mit Punten (Locations) übergeben wird. Der Rückgabewert soll ebenfalls ein vector sein nur das der mit Rect strukturen geüllt sein soll. Ein wichtiger Hinweis könnte sein, das die Punkte in keiner Form vorab sortiert wurden. Es gab schon vorher eine Lösung die aber recht simple gestrickt war und nur ein Rect zurückgab. Dabei wurde der kleinste X, größte X, kleinste Y und größte Y Wert ermittelt und daraus wurde dann das Rect gebildet. Das ist natürlich suboptimal sobald der vector nur wenige Punkte hat die aber weit auseinander liegen. Bsp.: Punkt A liegt bei 10/20 Punkt B liegt bei 1500/500 Punkt C liegt bei 1410/450 Die alte Funktion hätte jetzt ein Rectangle gebildet das wie folgt aussehen würde: Rectangle : X=10, Y=20, Width = 1480 , Heigth= 480 Da aber die Punkte die nicht angegeben wurden nicht interessant sind wurde der Vorschlag unterbreitet eine Funktion zu schreiben, welche multiple Rect zurückgibt um so den ganzen Overhead an Punkten Herr zu werden. Da das ganze aber recht performancekritisch ist fällt mir aktuell dazu noch kein adäquater. Die Möglichkeiten die mir eingefallen sind würden zu lange dauern da ich den vector sehr sehr oft durchiterieren müsste. Mein Ansatzpunkt war folgender: -Neben dem vector der die Punkte (Locations) übergibt müsste noch ein Wert übergeben werden, welcher die toleranzgrenze der Punktentfernungen defniert (Ab wann muss ein nuss ein neues Rechteck generiert werden?!) -Die nicht geordnete Liste müsste geordnet werden. Da bin ich mir jetzt nicht ganz sicher was besser wäre (nach X,Y oder beides). Das wäre mein Anfang. vector<Rect> CalculateRectangles(vector<Point> &data, int maxDistance) { vector<Rect> result; vector<Point> orderedVector; //Sortierungsschleife for (int i =0; i< data.size();i++){ //ToDo } //Duchiterieren des ordered Vectors und auf Basis der maxDistance die Rect Strukturen bilden. return result; } So jetzt zu meiner Frage. Wie würdet Ihr das angehen? Genauso oder völlig anders? Ich bin mir da nicht so ganz sicher. lg Gateway
  6. Es gibt die einen und die anderen Headhunter. Die die du beschrieben hast irgnoriere ich meistens. Aber es gibt auch noch jene die versuchen alles über die Person in Erfahrung zu bringen. Und eben diese lesen das Profil durchaus aufmerksam durch. Erst kürzlich hat sich einer bei mir per Handy gemeldet. Als ich ihm fragte wo er die Nummer her hat, sagte er er hätte über die Registrierung der Webseite meine Handynummer erhalten. (Ich besitze eine .eu Adresse bei der man bei der Registrierung auch eine Telefonnummer angeben muss). War zwar etwas strange von dem Headhunter aber das zeigt das Sie durchaus das Netz nach einem durchsuchen (und das sehr aufmerksam). lg Gateway
  7. Ich habe erst vor vier Monaten bei der aktuellen Firma angeheuert und leider war das eine totale Fehlentscheidung. Ich hatte noch beim Bewerbungsgespräch nach den Technologien gefragt die eingesetzt werden und man versicherte mir das gewisse Techniken nicht eingesetzt werden. Als es dann dort losging wurden mir direkt Projekte übergeben in dennen genau diese Technologie eingesetzt wird. Das war für mich wie ein Schlag ins Gesicht. Und ich bekomm immer mehr Projekte übergeben, was ja eigentlich nicht so schlim wäre, wenn es nicht immer so grauenhafte Projekte wären. Die alten Hasen die es losgeworden sind werden sich die Hände reiben. Ich denke wenn ich das länger mache werde ich noch Wahnsinnig xD. Momentan muss ich mich echt in die Arbeit quälen und das ist natürlich nicht mein wünschenswertes Ziel gewesen. Ich finde das eh sehr skuril. In meinem Lebenslauf stehen die Gebiete auf die ich mich spezialisiert habe. Ich als Arbeitgeber würde mich dann erstmal Fragen: "Benötige ich einen solchen MA. Beziehungsweise brauchen wir jemand in genau diesem Spezialgebiet." Das war letztendlich eine große Enttäuschung..... Das ist eine hervorragender Vorschlag. Ich werde da einfach noch ein paar Informationen einholen. Soweit mir das erklärt wurde, werde ich beim kunden Vorort eingesetzt um dort Projekte zu realisieren. Das kann auch über einen längeren Zeitraum gehen (1 Jahr und mehr). Man sagte mir das ich dann in Hotels untergebracht werde und bei längeren Projekten auch ein Apartment bereitgestellt wird. @smite: Eher weniger ein Beratungshaus. Der Kunde wünscht sich eine Individualsoftware. Die Firma macht ein Angebot und wenn sich alle einig sind wird ein Entwickler-Team zum Kunde geschickt wo die Individualsoftware dann ensteht. So wurde mir das erklärt. lg Gateway PS: Das mit der oben genannten Problematik scheinen aber mehrer Leute nicht verstanden zu haben. Das find ich teilweise echt traurig. Beispielsweise hab ich in meinem Xing Profil stehn, das ich auf keinen Fall wieder in Java entwickeln möchte. In den letzten zwei Wochen haben sich zwei Headhunter über Xing gemeldet und mich gefragt ob ich nicht als Java Entwickler bei Firma XY anheuern möchte. *Facepalm* Gott wirf Hirn vom Himmel.
  8. Hallo leute, ich wollte mal so in die Runde fragen wer denn hier als Consultant in der Entwicklerbranche tätig ist. Was für ein Typ Mensch muss man sein damit einem das zusagt? Ich habe kürzlich ein Angebot erhalten als Consultant festangestellt bei einer größeren Firma anzufangen. Man sagte mir von anfang an das ich größten Teils bei den Kunden vorort sein werde. Würdet Ihr diese Strapazen mitmachen bei gleichem Gehalt? Aktuell bekomme ich ein Jahresgehalt von 42K (40K fix 2K variable). Und man hat durchleuchten lassen das das neue Angebot sich in dem selben Sektor bewegt. Mein problem ist, ich kann mir nur sehr schwer was unter Consultant vorstellen. lg Gateway
  9. Hallo, ich muss aktuell bugfixes tätigen bei einer Anwendung die absoult unüberschaubare Dimensionen hat (350 dll's). Oft bekomme ich nur eine Beschreibung wie der Fehler in der Laufzeit zustande kam. Da mir das aber in dem meisten fällen nicht sagt in welcher der aberhunterten dll's nun letztendlich der Fehler produziert wird, ist das nicht sehr hilfreich. Ich suche nun eine Anwendung oder einen Weg, wie man die das ganze gut tracen könnte. Ich stelle mir das so vor: Ich klicke auf einen Button oder löse Mouse Events über die Oberfläche aus und das Tool sagt mir in welche dll und im besten Fall in welche Funktion er reinspringt. Also sowas ähnliches wie der Call Stack nur das ich eben nicht im Debugmodus bin und das ganze dann über eine externe Anwendung gelöst sein müsste die sich an den Prozess dranhängt. Die Anwendung und somit auch die ganzen Dll's sind in C# geschrieben. Gibts sowas? Habt ihr eine Idee wie ich mir das Leben leichter machen könnte? Ich sitzte Teilweise fünf Stunden vor der Kiste nur um die Stelle zu finden in der das entsprechende Event gehandled wird das den Fehler verursacht. Das ist irgendwie suboptimal. Solche Tracing Anwendungen hab ich an sich schon gefunden. Jedoch werden dort nur WinApi Call getraced. lg Gateway
  10. Sry hat ein wenig gedauert bis ich mich wieder melden konnte. Also das skurile an der Geschichte ist das im Log nur sporadisch die Einträge für die Verbindungen eingetragen wurden. Ich werde noch die zusätzlichen Tipps ausprobieren und dann werd ich nochmal das Timeout für den Server und für den Client höher setzten. lg Gateway
  11. Hallo leute, ich habe folgendes Problem. Auf meinem Server läuft eine Server-Anwendung von mir. Eine Verbindung von meinem Client-Pc geht hervorragend. Nur sobald ich einen Download vom Server mache blockiert die Firewall. Ich habe bereits eine Eingehende sowie eine Ausgehende Regel definiert. Das ganze hat aber nichts gebracht. Es muss aber scheinbar die Firewall sein, da der Download funktioniert sobald ich die Firewall komplett abschalte. Kann sich das einer erklären? Hier im Video sieht man ganz genau was passiert (youtube link). Ich kanns mir nicht ganz erklären und hoffe ihr habt nen Tipp. lg Gateway
  12. Tolles ding. Bei uns haben Sie es nicht durchgesagt und ich hab keine Steigerung für 2015 gerechnet. Für mich war das auch nicht komisch. Ich dachte mir das es durchaus möglich sein kann das Sie mit keiner Steigerung der Nutzung im dritten Jahr rechnen. Kann ja sein das die Nutzung des Service stagniert oder keine neuen User dazu kommen....
  13. Du kannst es machen wie der Entwickler in dem diesem Beitrag. Must halt mit StringFormat die größe für die tabs selbst definieren. Das enstprechende StringFormat kannst du dann der DrawString Funktion übergeben. lg Gateway
  14. Es gibt zwei Möglichkeiten. Die erste ist die gänigste und "leichteste" (haben wir in meinem vorherigen Betrieb auch so gemacht). Da es sich hierbei auch "nur" um einen drucker handelt bei dem die Treiber dabei sind musst du dich lediglich mit dem Druckprozess im .NET vertraut machen. Dafür gibt es bereits Klassen und Controls im .NET. Must nur eben die eingestellte größe beachten (ist ja etwas kleiner als herkömliche drucker ). Die zweite Möglichkeit ist etwas schwieriger und bei weitem nicht so allgemeingültig wie über die Druckerklassen. Die Teile die wir immer hatten wurden über usb angeschlossen. Das heißt du könntest diese per USB ansteuern und dir eine eigene Klasse zum Drucken schmieden. Allerdings ist das total Aufwendig und nervenaufreibend. Ich empfehle dir die ohnehin schon existierenden Druckerklassen zu studieren (die habens aber auch schon in sich). Ich persönlich finde das Drucken ist einer unliebsamsten Aufgaben für einen Entwickler, wobei das .NET das ganze schon enorm vereinfacht. lg Gateway
  15. Hi Leute, hab es dann doch gewagt um festzustellen das das garnicht geht . (Nur eine Netzwerkkarte verfügbar). Letzendlich sollte es egal sein. Ich habe mir jetzt eine zweite Ip besorgt um einer Win2k8R2 VM eben diese zuzuweisen. Jetzt stellt sich herraus das der Anbieter einen MAC Adressen Filter benutzt. Ich habe daraufhin versucht in der VM die MAC Adresse über den Gerätemanager zu setzten. (also auf die gleiche MAC Adresse wie die der Netzwerkkarte). Laut Gerätemanager hat er es gemacht. laut "ipconfig /all" nicht. Auch nach einem Neustart war noch immer die alte MAC Adresse drin. Ich bin mir aber ziemlich sicher das einer von euch schonmal dem selben Problem gegenüberstand. Wie würdet Ihr das machen. Ich denke da gibt es einige Ansatzmöglichkeiten. Der Hostsystem ist ebenfalls ein Win2k8R2. lg Gateway PS: Wäre sehr schade wenns nicht ginge. Dann hätte ich mir gleich ne kleiner Kiste gemietet und nicht so ein Monster .
  16. Guten Morgen, ich will auf meinem Rootserver einen weiteren virtuellen Netzwerkadapter für Hyper-V hinzufügen. Als ich alles soweit eingestellt hatte und auf Übernehmen klickte kam die Meldung das während der Einrichtung die Netzwerkverbindung verloren gehn könnte. Und das ich gegebenfalls nochmal Interagieren muss damit diese wieder Verfügbar ist. Ich habe abgebrochen und mich nicht getraut auf weiter zu klicken . Das Ding ist, ich komm ja nür über Netzwerk drauf und wenn das Ausfällt sind meine Möglichkeiten gleich null. Hat jemand bereits etwas dergleichen gemacht oder kennt einen Weg wie ich das Risiko minimieren beziehungsweise gänzlich eliminieren kann. (beispielsweise ein script schreiben das unbeaufsichtigt das ganze erledigt) lg Gateway
  17. Hi, wenn es auch was exotischeres sein darf und es nicht zwangsläufig opensource sein muss sondern nur kostenlos, dann kann ich dir den Qt Creator empfehlen. Ich teste den aktuell auch grad aus und bin bis jetzt eigentlich recht zufrieden. Mit dem Teil kannst du neben Windows Programmen auch Linux und Mac OSX Programme schreiben. lg Gateway
  18. Hat sich erledigt. Es war so wie ich es vermutete.
  19. Hallo, ich bin mir nicht ganz sicher wie die Signatur in C# aussehen muss für folgende Cpp Funktion: #define _extern extern "C" __declspec(dllexport) _extern bool ExtractChangedRectangleExt(HBITMAP hbmp, HBITMAP hbmp1, int min, int max, ImageCompareResult &result); Die ImageCompareResult sieht wie folgt aus: struct ImageCompareResult{ public: int x; int y; HBITMAP changedArea; int success; double percent; int error; }; Müsste ich das dann in C# so machen: [StructLayout(LayoutKind.Sequential)] public struct ImageCompareResult { public int x; public int y; public IntPtr changedArea; public int success; public double percent; public int error; }; [DllImport("mydll.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern bool ExtractChangedRectangleExt(IntPtr hbmp, IntPtr hbmp1, int min, int max, ref ImageCompareResult result); lg Gateway
  20. Hi, ich hab es jetzt auf zwei Wegen versucht. Zum einen habe ich versucht das "newBitmap" per delete zu zerstören. Das hat den Leak nicht verhindert. Letztendlich hab ich fast alles geändert was du bemängelt hast und siehe da es funktioniert. Die entsprechenden Konstrukte sehen jetzt wie folgt aus: #include "StdAfx.h" #include "GdiCore.h" GdiCore::GdiCore(HBITMAP input) { GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); palette = new HPALETTE(); bmp = new Bitmap(input, *palette); } GdiCore::~GdiCore(void) { //DeleteObject(bmp); delete palette; delete bmp; GdiplusShutdown(gdiplusToken); } HBITMAP GdiCore::Resize(int width, int height){ HBITMAP result = NULL; UINT o_height = bmp->GetHeight(); UINT o_width = bmp->GetWidth(); int n_width = width; int n_height = height; double ratio = ((double)o_width) / ((double)o_height); if (o_width > o_height) { n_height = static_cast<int>(((double)n_width) / ratio); } else { n_width = static_cast<int>(n_height * ratio); } //Bitmap* newBitmap = new Bitmap(n_width, n_height, bmp->GetPixelFormat()); Bitmap newBitmap(n_width, n_height, bmp->GetPixelFormat()); Graphics graphics(&newBitmap); graphics.DrawImage(bmp, 0, 0, n_width, n_height); newBitmap.GetHBITMAP(NULL,&result); //DeleteObject(newBitmap); //delete newBitmap; return result; } Ich bin begeistert. Vielen Dank Klotzkopp. Du warst wie immer eine enorme Hilfe :valen. lg Gateway
  21. Jup wird geändert. Das ist ne Leiche aus einer hier nicht aufgeführt Funktion. Hab ich jetzt mal rauskommentiert. Irgendwie hatte ich das Gefühl das der Desktruktor nicht aufgerufen wurde. Also hab ich Release() geschrieben und für den Fall das er doch in den Desktruktor gehen sollte, sollte er nicht versuchen doppelt das delete auszuführen deswegen der boolean. Weil das teilweise enorm großen Bitmaps sein können und ich eigentlich immer der Meinung war das große Objekte nichts auf dem Stack zu suchen haben. Danke ich dachte ich versuchs mal und da der Debugger das nicht als Syntaxfehler angekreidet hat, dachte ich er hats gefressen. @all: Seid ihr euch sicher das hier: Der Leak stattfindet? Ihr dürft die Zusammenhänge nicht vergessen. In der Resize Funktion wird ein neues Bitmap auf dem Heap generiert (newBitmap). Dann hol ich mir den Pointer der auf die Bitmapdaten zeigt newBitmap->GetHBITMAP(NULL,&result); Ich kann innerhalb dieser Funktion unmöglich das Bitmap löschen da sonst C# die Bitmapdaten nicht abgreifen kann. Jetzt sieht es ja so aus das C# die Bitmapdaten mithilfe des Pointers in ein neues Image Objekt kopiert. Image ImgCache = Image.FromHbitmap(ptr); Dannach wird mit hilfe der Funktion ReleaseHBitmap der Pointer an meine Cpp Funktion "ReleaseHBitmap" übergeben um dort das Bitmap zu löschen. ScreenCaptureExt.ReleaseHBitmap(ptr) Dort wird dann das Bitmap zerstört: _extern bool ReleaseHBitmap(HBITMAP hbitmap){ return DeleteObject(hbitmap ); }
  22. Hi, ich muss das Thema leider noch mal in den Fokus rücken. Das Problem mit den obigen Funktionen ist behoben. Zwar schauckelt er sich teilweise recht hoch mit der Speichernutzung, jedoch gibt er es brav wieder frei. Jetzt habe ich ein paar Testläufe ín Cpp gestartet unter Verwendung von GDI. Hier besteht leider wieder das Problem und es ist nicht mit der vorherigen Lösung behoben. Ich erhalte wieder in C# eine Out of Memory Exception und ich vermute stark das es an der Cpp Implementierung liegt. GdiCore.h #include <Windows.h> #include <GdiPlus.h> #pragma once using namespace Gdiplus; using namespace std; class GdiCore { private: Bitmap* bmp; GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; HPALETTE* palette; bool hDeleted; public: ~GdiCore(void); GdiCore(HBITMAP input); //diverse andere Grafikfunktionen //... //diverse andere Grafikfunktionen HBITMAP Resize(int width, int height); void Release(); }; GdiCore.cpp: #include "StdAfx.h" #include "GdiCore.h" GdiCore::GdiCore(HBITMAP input) { GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); palette = new HPALETTE(); bmp = new Bitmap(input,*palette); } GdiCore::~GdiCore(void) { if (!hDeleted ) Release(); } HBITMAP GdiCore::Resize(int width, int height){ HBITMAP result = NULL; UINT o_height = bmp->GetHeight(); UINT o_width = bmp->GetWidth(); int n_width = width; int n_height = height; double ratio = ((double)o_width) / ((double)o_height); if (o_width > o_height) { n_height = static_cast<int>(((double)n_width) / ratio); } else { n_width = static_cast<int>(n_height * ratio); } Bitmap* newBitmap = new Bitmap(n_width, n_height, bmp->GetPixelFormat()); Graphics graphics(newBitmap); graphics.DrawImage(bmp, 0, 0, n_width, n_height); newBitmap->GetHBITMAP(NULL,&result); return result; } void GdiCore::Release(){ if (!hDeleted ){ //DeleteObject(bmp); delete palette,bmp; GdiplusShutdown(gdiplusToken); hDeleted = true; } } Die Funktion die ich aus C# Aufrufe ist wie folgt definiert: _extern HBITMAP ResizeImageExt(HBITMAP bmp, int width, int height){ HBITMAP result = NULL; GdiCore* core = new GdiCore(bmp); result = core->Resize(width,height); core->Release(); delete core; return result; } Hier ist der C# Sharp Aufruf: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.Drawing; namespace Utility.Interop.dGDI { public sealed class ImageUtilExt { #region pInvoke [DllImport("dGDI.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] private static extern IntPtr ResizeImageExt(IntPtr bmp, int width, int height); #endregion #region Static Functions public static Image ResizeImage(Bitmap input, int width, int height) { Image result = null; if (input == null) return null; IntPtr src = IntPtr.Zero; try { src = input.GetHbitmap(); } catch { return (Image)input; } IntPtr ptr = ResizeImageExt(src, width, height); if (ptr != IntPtr.Zero) { Image ImgCache = Image.FromHbitmap(ptr); result = (Image)(ImgCache.Clone()); bool bRelease = ScreenCaptureExt.ReleaseHBitmap(ptr); System.Diagnostics.Trace.WriteLine(bRelease.ToString()); ImgCache.Dispose(); ImgCache = null; } return result; } #endregion } } Hat jemand von euch eine Vermutung woran es liegen könnte? lg Gateway
  23. Ja da hast du recht . Ich hatte die clr im neuen Projekt. Nachdem ich jetzt den clr support wieder rausgenommen habe hab ich wieder die 204 Fehler bekommen. Kurz bevor ich aufgeben wollte, hab ich gemerkt das die ATL Header nicht mit im Projekt einbezogen wurden. Nachdem ich das geändert hatte lies es sich kompilieren . lg Gateway
  24. Das liegt daran das ich es bereits probiert habe. Selbige Fehleranzahl und auch Fehler. Was ich jetzt aber zusätzlich probiert habe ist folgendes. Ich hatte ja die Vermutung das es bezüglich dem Win7 Sdk Probleme gibt. Also hab ich einen neuen Versuch auf ner VM von mir gestartet. Auf der VM sind die Bedingung bis auf das Win7 Sdk identisch. Dort erhalte ich nur folgende fünf Fehler: Es hat sich nichts am Code geändert außer dem Klassennamen. Wenn ich jetzt nochmal die Funktionen in die Klasse reinpacke verändern sich die Fehler. So sieht das Headerfile (in der VM) jetzt aus: #include <Windows.h> #include <GdiPlus.h> #include <string> #pragma once ref class gditest { public: gditest(void); ULONG_PTR(m_gdiplusToken); GdiplusStartupInput gdiplusstartupinput; GdiplusStartup(&m_gdiplusToken, &gdiplusstartupinput, NULL); }; Die Fehler sehen jetzt wie folgt aus: Kann es sein das die GDI header ursprünglich für C ausgelegt wurden und manche C Typen nicht mit Cpp kompatibel sind? lg Gateway
  25. Nein nicht in meinem Projekt. Ich hab ein neues Testprojekt erstellt. Das ist die DevGDI.h Datei: #include<Windows.h> #include <GdiPlus.h> #include <string> #pragma once class DevGDI { public: DevGDI(void); ~DevGDI(void); }; Das ist die DevGDI.cpp Datei: #include "StdAfx.h" #include "DevGDI.h" DevGDI::DevGDI(void) { } DevGDI::~DevGDI(void) { } Das ist alles was bisher definiert wurde. hm bisher tappe ich immer noch im dunkeln . lg Gateway

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...