Hallo, ich möchte euch hier meinen kleinen Wrapper für WebP, das Bilderformat von Google vorstellen. Momentan können damit nur WebP Bilder zu einer Bitmap Decodiert werden, der Encoder ist noch nicht Implementiert.
Beispiel um ein WebP Bild in einer PictureBox anzuzeigen:
LibwebpSharp.WebPDecoder dec = new LibwebpSharp.WebPDecoder();
PictureBox1.Image = dec.DecodeBGRA(@"X:\PATH\TO\YOUR\IMAGE.webp");
Den Download, Quelltext und mehr Infos findet ihr auf GitHub:
https://github.com/mc-kay/libwebp-sharp
Viellicht kann es ja jemand gebrauchen =)
I'am fucking love it.
Bisher habe ich mich gedrückt mal was zu schreiben aber die Software ist echt super und macht es super bequem den misst zu machen 😁
Die generierten PDF's sehen wirklich gut aus.
Was jetzt noch der totale Oberhammer wäre wenn du einen Webservice anbieten würdest den man selber Hosten könnte um die Daten in eine MSSQL Datenbank weg zu speichern. Dann könnte ich den Kram gleich zu meinen Webhoster wegsichern und hätte die Täglichen Backups gleich inklusive 8)
TOP jedenfalls weiter so 👍
PS: Wo speichert dein Programm die XML?
Ich benutze jetzt eine andere Funktion bei der ich den Speicher jetzt auch selbst reserviere und dann den Pointer dahin übergebe. Funktioniert genau so und ich kann ihn auch sauber mit FreeHGlobal() freigeben.
Ich habe jetzt nochmal ein wenig rumprobiert und dabei ist mit folgendes aufgefallen:
Statt Error 87 bekomme ich jetzt seit gestern immer Error 1008 nach dem Aufruf von free() geliefert:
ERROR_NO_TOKEN
1008 (0x3F0)
An attempt was made to reference a token that does not exist.
Das komische ist aber das ich das auch bekomme wenn ich SetLastError auf false setzte. Das würde ja bedeuten das dieser Fehler nicht direkt durch den aufruf von free() produziert wird sondern von irgend einer Unterfunktion die dabei aufgerufen wird? Oder liege ich da total falsch?
Joa klar, voll verpeilt:
Also das funktioniert leider auch nicht, gibt Win32 Error 87:> Fehlermeldung:
ERROR_INVALID_PARAMETER
87 (0x57)
The parameter is incorrect.
EDIT:
Ich habe jetzt mal die Funktion GlobalFree probiert, jetzt ist zwar GetlastWin32Error = 0, allerdings ist der Rückgabewert nicht wie in der MSDN beschrieben NULL sondern dort steht immer noch die Speicheradresse was laut MSDN heißt das der Vorgang nicht erfolgreich war:
If the function succeeds, the return value is NULL.
If the function fails, the return value is equal to a handle to the global memory object. To get extended error information, call GetLastError.
Bin ich jetzt ein wenig irritiert...
Ich habe mich nochmal durch den Source gewühlt und dabei folgendes Kommentar gefunden:
The code that calls any of these functions must delete the data buffer (uint8_t*) returned by these functions with free().
Also müsste ich ja nur dir free() Funktion Invoken:
[DllImport("msvcrt.dll", SetLastError = true)]
static extern void free(IntPtr memblock);
Das kann ich auch ohne Fehler ausführen, aber kann ich auch irgendwie überprüfen ob der Aufruf erfolgreich war? Die Funktion gibt mir ja dummerweise nichts zurück...
Hallo, ich greife per P/Invoke auf eine DLL zu um dort eine Funktion auszuführen.
Dazu reserviere ich mir zuerst Speicher mit Marshal.AllocHGlobal() und kopiere anschließend mit Marshal.Copy() ein Byte Array in den Unverwalteten Speicher. Dann übergebe ich der Funktion aus der DLL einen IntPtr mit der Adresse zu diesen Daten. Diese Funktion gibt mir anschließend ebenfalls einen Pointer zu den bearbeiteten Daten zurück die ich ebenfalls wieder mit Marshal.Copy() zurück in den Verwalteten Speicher lade (ein Verwaltetes Byte Array).
Soweit ist auch alles kein Problem, die Daten die ich bekomme sind OK.
Jetzt geht es aber darum den Unverwalteten Speicher mit der Methode Marshal.FreeHGlobal() wieder frei zu geben:
Mit dem von mir selbst mittels Marshal.AllocHGlobal() reservierten Speicher funktioniert das auch, allerdings nicht mit dem Speicher die die DLL Funktion reserviert hat. Dort bekomme folgende Exception:
_COMPlusExceptionCode = -532459699
Um mehr Infos zu bekommen habe ich einen DLL Import auf die Windows Funktion "LocalFree" gemacht, dort bekomme ich diese Fehlermeldung:> Fehlermeldung:
Win32 Error: 998
Die MSDN sagt dazu folgendes:
ERROR_NOACCESS: 998 (0x3E6)
Invalid access to memory location.
Wo daran kann das liegen?
Mein Hostsystem ist Windows 7 x64, die DLL wurde aber für x86 kompiliert und mein Projekt ist auch auf x86 eingestellt.
Wie gesagt funktioniert auch alles korrekt, nur die die Speicherfreigabe macht Probleme. Ob ich es als Administrator oder nicht ausführe macht keinen unterschied.
Das Angebot ist nicht mehr gültig oder?
Ich kann den Code zwar Einlösen aber am Ende des Bestellprozesses wird mir trotzdem der Preis von 11,84€ angezeigt.
Passend zum Thema:
IPv4-Adresspool leert sich rasch
@ JAck30lena
Und wie geht das 🤔
Dafür bräuchte man ja "Desktop Interaction" aber das geht ab Windows Vista nicht mehr.