Hallo,
ist schon eine Weile her, dass ich mit Delphi mal was gemacht habe und im Moment komme ich bei folgendem Problem nicht weiter:
Ich wuerde gerne ein Extension-
DLL fuer einen virtuellen Drucker-Treiber mit Delphi ertellen -
Win32 DLL mit
Unicode Support - habe angefangen, das entsprechende C-Headerfile umzusetzen, aber irgdendwie scheint das ganze nicht zu funktionieren.
Hier das C-Headerfile:
Delphi-Quellcode:
enum
{
SC_OUTPUT_BLACKWHITE = 1,
SC_OUTPUT_GRAYSCALE,
SC_OUTPUT_COLOR,
};
enum
{
SC_TIFTYPE_NONE = 1,
SC_TIFTYPE_PACKBITS,
SC_TIFTYPE_CCITT_HUFFMAN,
SC_TIFTYPE_CCITT_T4,
SC_TIFTYPE_CCITT_T6,
SC_TIFTYPE_JPEG,
};
typedef struct _SCJOBINFO
{
// Form name
TCHAR formName[32];
// Only values between 100 to 300 dpi are accepted
int printQuality;
// One of SC_OUTPUT_BLACKWHITE to SC_OUTPUT_COLOR
int colorType;
// Only values between 1 to 100 are accepted.
// Higher value means better quality.
int jpegQuality;
// One of SC_TIFTYPE_NONE to SC_TIFTYPE_JPEG.
// PackBits and one of the CCITT types are only applicable if colorType
// is set to SC_OUTPUT_BLACKWHITE.
int tiffCompression;
// Only applicable if tiffCompression is set to SC_TIFTYPE_JPEG.
// Only values between 1 to 100 are accepted.
// Higher value means better quality.
int tiffQuality;
// Only values between 1 to 100 are accepted.
// Higher value means better quality.
int pdfQuality;
}
SCJOBINFO;
enum
{
SC_BMP = 1,
SC_PNG,
SC_JPG,
SC_TIF_SINGLE,
SC_PDF_SINGLE,
SC_TIF_MULTIPLE,
SC_PDF_MULTIPLE,
};
typedef struct _SCFILEINFO
{
// Output filename without extension. This parameter is required.
wchar_t name[MAX_PATH];
// Extension of output filename. This parameter is optional.
// If none is supplied, a default extension will be used.
wchar_t ext[MAX_PATH];
// Output image type, which could be one of SC_BMP to SC_PDF_MULTIPLE. <tt>SC_PDF_MULTIPLE</tt>.
// This parameter is required.
int type;
}
SCFILEINFO;
typedef BOOL (
WINAPI *SCGETJOBINFOFUNC) (SCJOBINFO*);
typedef BOOL (
WINAPI *SCGETSAVEFILENAMEFUNC) (SCFILEINFO*);
typedef void (
WINAPI *SCENDOFJOBFUNC) ();
Hier, was ich bislang gemacht habe:
Delphi-Quellcode:
library dll;
uses
ShareMem, SysUtils, Classes, Windows, Messages, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
{$R *.res}
const
REGROOT = '
Software\\bdaehn\\SoftCopy';
type
SCJOBINFO =
record
formName:
Array[0..32-1]
of CHAR;
printQuality: Integer;
colorType: Integer;
jpegQuality: Integer;
tiffCompression: Integer;
tiffQuality: Integer;
pdfQuality: Integer;
end;
type
SCFILEINFO =
record
name:
Array[0..MAX_PATH-1]
of WCHAR;
ext:
Array[0..MAX_PATH-1]
of WCHAR;
typ : Integer;
end;
function scGetJobInfo(
var test: SCJOBINFO):Bool;
begin
// ShowMessage('buh');
Result:=True;
end;
function scGetSaveFilename(
var test: SCFILEINFO):Bool;
begin
//ShowMessage('buh');
Result:=True;
end;
function scEndOfJob():Bool;
begin
// ShowMessage('buh');
Result:=True;
end;
begin
end.
Code kompiliert, aber ich bekomme bei der Benutzung des Treibers eine "Memory could not be read" Execptions - irgendeine Idee ? Ich gehe einmal davon aus, dass ich etwas grobes falsch mache, was Uebergabe-Parameter und dergleichen angeht. Wichtig ist wohl auch
Unicode-Support fuer diese
DLL!
Attached ist noch ein Beispiel in C++ ...
Vielen Dank und Gruss
/bjoern