Hej Uffe, Arne, Poul, Stig og Christian.
Tak for jeres input indtil nu.
De har været yderst hjælpsome.
Jeg har fået meget til at virke. Mangler dog stadigvæk noget.
Jeg opsummere lige lidt.
For at kunne kalde funktionerne i DLL skulle jeg skrive:
function flxAdministration(func:Integer;var error: LongWord) : Integer; StdCall ; External 'flxdrv.dll';
StdCall skal bare ikke stå til sidst, som Poul skrive, for så får jeg en compiler fejl
Ovenstående funktion kan jeg nu kalde.
For, at den kunne virke, var jeg nød til at definere den første parameter (func) som en integer, og i mit program lave et par konstanter (ikke helt nødvendige, men gør det nemmere læseligt)
Konstanterne er sådan:
Const
ADMIN_ENDOFDAY = 1;
ADMIN_ENDOFDAYLOG = 2;
ADMIN_REPORT_TERMINALREPORT = 3;
ADMIN_REPORT_TOTALS = 4;
ADMIN_REPORT_LOG = 5;
ADMIN_REPORT_OLDLOG = 6;
ADMIN_LASTRECEIPT = 7;
ADMIN_UNLOCK_RECEIPT = 8;
ADMIN_CLOCKSYNCPBS = 9;
ADMIN_CLOCKSYNCPOINT = 10;
ADMIN_SENDLOG = 11;
ADMIN_CLEARDATASTORE = 12;
ADMIN_DOWNLOADPROGRAM = 13;
ADMIN_DOWNLOADPARAM = 14;
ADMIN_DOWNLOADPAN = 15;
ADMIN_DOWNLOADTLCMDB = 16;
ADMIN_RESTORETLCMDB = 17;
ADMIN_CONTRASTUP = 18;
ADMIN_CONTRASTDOWN = 19;
ADMIN_RESTARTTERMINAL = 20;
ADMIN_EJECTCARD = 21;
ADMIN_MSC = 22;
ADMIN_MAX = 23;
Hvis jeg så kalder ovenstående funktion med f.eks. ADMIN_CLOCKSYNCPBS får bliver der udført noget funktionalitet i DLL.
Denne virker faktisk nu !
Men hvis jeg kalder denne ADMIN_REPORT_TERMINALREPORT får jeg alt hvad jeg skal bruge, MEN til sidst får jeg en access violation.
Jeg er (næsten) sikker på, at der har noget at gøre med den sidste parameter (error).
Definitionen i C header filen ser sådan ud:
DllExport int flxAdministration(
FLX_ADMIN_FUNCTION func,
unsigned int *error);
func har jeg lavet om til en integer (i flg. samtale med leverandør var det OK, og det virker).
Så er der parametren unsigned int *error.
Jeg er faktisk ikke helt klar over, hvordan jeg skal tolke den.....
Efter at have kørt H2Pas blev funktionen defineret således:
function flxAdministration(func:FLX_ADMIN_FUNCTION; var error: Dword) : Integer; StdCall ; External 'flxdrv.dll';
Typen PDWord er defineret således:
Pdword = ^dword;
Jeg er så i tvivl om, hvordan jeg definere selve funktionskaldet (der hvor jeg skrive External; 'flxdrc.dll';) og der hvor jeg rent faktisk kalder den!
Ellers føler jeg, at jeg er nået rigtig langt, har lært meget vedr. C, DLL filer, Delphi m.m.
På forhånd tak
Michael
--
Best Regards / Venlig hilsen
Michael Vilhelmsen
==========
Best Regards / Venlig hilsen
Michael Vilhelmsen