- Offizieller Beitrag
Hi,
für den QR-Code Creator nutze ich die quricol32.dll. Jedoch finde ich keinen Weg den Parameter für den ErrorCorretion-Level zu übergeben, somit wird immer mit dem Default-Wert 0 gearbeitet.
Ebenso unklar ist, wie die Funktion DestroyBuffer() aufgerufen werden soll. Ich interpretiere die Funktion so, dass dazu als Parameter ein Buffer übergeben werden soll, jedoch liefern die vorab zum encodieren genutzten Funktionen keinen Rückgabewert. Ein Aufruf der Funktion ohne Parameter führt zum Crash von AutoIt.
Global $iMargin = 4, $iPixelSize = 2
DllCall("quricol32.dll", "none", "GenerateBMPW", "str", $sPath & $_sImageName & ".bmp", "str", $_sText, "int", $iMargin, "int", $iPixelSize) ; == funktioniert
; == TErrorCorretion
Global Const $QR_ECLEVEL_L = 0 ; == up to 7% damage
Global Const $QR_ECLEVEL_M = 1 ; == up to 15% damage
Global Const $QR_ECLEVEL_Q = 2 ; == up to 25% damage
Global Const $QR_ECLEVEL_H = 3 ; == up to 30% damage
DllCall("quricol32.dll", "none", "GenerateBMPW", "str", $sPath & $_sImageName & ".bmp", "str", $_sText, "int", $iMargin, "int", $iPixelSize, "int", $QR_ECLEVEL_Q) ; == funktioniert nicht
DllCall("quricol32.dll", "none", "DestroyBuffer") ; <== CRASH!!!
[/autoit]Da mir C++ recht fremd ist, kann ja vielleicht ein in dieser Richtung Beschlagener mit dem Code was anfangen:
quricol.h
#pragma once
#include "qrencode.h"
#ifdef __cplusplus
extern "C" {
#endif
void WINAPI GeneratePNGW(LPWSTR fileName, LPWSTR text, int margin, int size, QRecLevel level);
void WINAPI GeneratePNGA(LPSTR fileName, LPSTR text, int margin, int size, QRecLevel level);
#ifdef UNICODE
#define GeneratePNG GeneratePNGW
#else
#define GeneratePNG GeneratePNGA
#endif // !UNICODE
HBITMAP WINAPI GetHBitmapW(LPWSTR text, int margin, int size, QRecLevel level);
HBITMAP WINAPI GetHBitmapA(LPSTR text, int margin, int size, QRecLevel level);
#ifdef UNICODE
#define GetHBitmap GetHBitmapW
#else
#define GetHBitmap GetHBitmapA
#endif // !UNICODE
void WINAPI GenerateBMPW(LPWSTR fileName, LPWSTR text, int margin, int size, QRecLevel level);
void WINAPI GenerateBMPA(LPSTR fileName, LPSTR text, int margin, int size, QRecLevel level);
#ifdef UNICODE
#define GenerateBMP GenerateBMPW
#else
#define GenerateBMP GenerateBMPA
#endif // !UNICODE
void WINAPI GetPNGW(LPWSTR text, int margin, int size, QRecLevel level, LPINT bufSize, __deref_opt_out void **ppvBits);
void WINAPI GetPNGA(LPSTR text, int margin, int size, QRecLevel level, LPINT bufSize, __deref_opt_out void **ppvBits);
#ifdef UNICODE
#define GetPNG GetPNGW
#else
#define GetPNG GetPNGA
#endif // !UNICODE
void WINAPI DestroyBuffer(void* buffer);
#ifdef __cplusplus
}
#endif
Alles anzeigen
Die kompletten Source-Dateien inkl. der 32Bit-Dll habe ich angehängt.
Edit 25.12.2012:
Wie aus der Doku nicht hervorgeht, ist der ErrorCorrectionLevel-Parameter ausschließlich in der 64-Bit Variante der Dll verfügbar. Damit ist der Parameter dann ja total überflüssig. Tools zu erstellen, die nicht auf 32-Bit Maschinen laufen würde ich ziemlich schräg finden.