Thema: Delphi Win32 DLL erstellen

Einzelnen Beitrag anzeigen

bdaehn

Registriert seit: 22. Jan 2004
Ort: Wiesbaden
9 Beiträge
 
Delphi 7 Enterprise
 
#1

Win32 DLL erstellen

  Alt 29. Apr 2005, 15:37
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
Angehängte Dateien
Dateityp: cpp softcopyex_158.cpp (3,4 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat