|
| Bruge en DLL Fra : Michael Vilhelmsen |
Dato : 15-08-05 14:11 |
|
Hej
Jeg har fra en af vores leverandører fået en DLL fil, som stiller nogle funktioner tilrådighed.
Men hvordan får jeg mulighed for, at kalde disse i Delphi 5 Ent. ?
Eller hvor finder jeg informationer om dette ?
Michael
--
Best Regards / Venlig hilsen
Michael Vilhelmsen
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com
| |
Uffe Kousgaard (15-08-2005)
| Kommentar Fra : Uffe Kousgaard |
Dato : 15-08-05 15:06 |
|
"Michael Vilhelmsen"
<Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> wrote in message
news:mn.7b8e7d581a7bb669.11460@Microcom.PLEASEREMOVE.Dk...
> Hej
>
> Jeg har fra en af vores leverandører fået en DLL fil, som stiller nogle
> funktioner tilrådighed.
Du skal bede om en beskrivelse af DLL'en fra leverandøren. Sandsynligvis en
såkaldt header fil til C. Prøv at kalde "tdump din.dll" for at se, hvilke
funktioner den indeholder. Er der kun 2 med navne á la DLLregister
(omtrent), så er der tale om et active-x og ikke en klassisk DLL med
eksporterede funktioner.
hilsen
Uffe
| |
Michael Vilhelmsen (16-08-2005)
| Kommentar Fra : Michael Vilhelmsen |
Dato : 16-08-05 07:48 |
|
Uffe Kousgaard expressed precisely :
> "Michael Vilhelmsen" <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> wrote in message news:mn.7b8e7d581a7bb669.11460@Microcom.PLEASEREMOVE.Dk...
>> Hej
>>
>> Jeg har fra en af vores leverandører fået en DLL fil, som stiller nogle funktioner tilrådighed.
>
> Du skal bede om en beskrivelse af DLL'en fra leverandøren. Sandsynligvis en såkaldt header fil til C. Prøv at kalde "tdump din.dll" for at se, hvilke funktioner den indeholder. Er der kun 2 med
> navne á la DLLregister (omtrent), så er der tale om et active-x og ikke en klassisk DLL med eksporterede funktioner.
Der er mere end 2....
Fandt ud af, at jeg kan skrive:
function flxConnect (Int : Integer) : Integer; External 'flxdrv.dll';
function flxDisconnect () : Integer; External 'flxdrv.dll';
function flxOpen() : Integer; External 'flxdrv.dll';
under interface delen.
Og det ser ud til at virke.
Er det så ikke korrekt, tror du ?
Michael
--
Best Regards / Venlig hilsen
Michael Vilhelmsen
==========
Best Regards / Venlig hilsen
Michael Vilhelmsen
| |
Michael Vilhelmsen (16-08-2005)
| Kommentar Fra : Michael Vilhelmsen |
Dato : 16-08-05 13:48 |
|
on 15-08-2005, Uffe Kousgaard supposed :
> "Michael Vilhelmsen" <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> wrote in message news:mn.7b8e7d581a7bb669.11460@Microcom.PLEASEREMOVE.Dk...
>> Hej
>>
>> Jeg har fra en af vores leverandører fået en DLL fil, som stiller nogle funktioner tilrådighed.
>
> Du skal bede om en beskrivelse af DLL'en fra leverandøren. Sandsynligvis en såkaldt header fil til C. Prøv at kalde "tdump din.dll" for at se, hvilke funktioner den indeholder. Er der kun 2 med
> navne á la DLLregister (omtrent), så er der tale om et active-x og ikke en klassisk DLL med eksporterede funktioner.
>
> hilsen
> Uffe
Jeg har en header fil.
Kan jeg indlæse den i Delphi ?
Michael
--
Best Regards / Venlig hilsen
Michael Vilhelmsen
==========
Best Regards / Venlig hilsen
Michael Vilhelmsen
| |
Christian Iversen (16-08-2005)
| Kommentar Fra : Christian Iversen |
Dato : 16-08-05 17:10 |
|
Michael Vilhelmsen wrote:
> on 15-08-2005, Uffe Kousgaard supposed :
>> "Michael Vilhelmsen"
>> <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> wrote in
>> message news:mn.7b8e7d581a7bb669.11460@Microcom.PLEASEREMOVE.Dk...
>>> Hej
>>>
>>> Jeg har fra en af vores leverandører fået en DLL fil, som stiller nogle
>>> funktioner tilrådighed.
>>
>> Du skal bede om en beskrivelse af DLL'en fra leverandøren. Sandsynligvis
>> en såkaldt header fil til C. Prøv at kalde "tdump din.dll" for at se,
>> hvilke funktioner den indeholder. Er der kun 2 med navne á la DLLregister
>> (omtrent), så er der tale om et active-x og ikke en klassisk DLL med
>> eksporterede funktioner.
>>
>> hilsen
>> Uffe
>
> Jeg har en header fil.
> Kan jeg indlæse den i Delphi ?
Kig efter programmet "h2pas" fra FreePascal. Det kan konvertere det meste af
header-filerne, så skal du bare lave de sidste tilretninger i hånden.
--
M.V.H
Christian Iversen
| |
Michael Vilhelmsen (17-08-2005)
| Kommentar Fra : Michael Vilhelmsen |
Dato : 17-08-05 14:47 |
|
>
> Kig efter programmet "h2pas" fra FreePascal. Det kan konvertere det meste af
> header-filerne, så skal du bare lave de sidste tilretninger i hånden.
OK Jeg fandt programmet og har prøvet at køre det.
Det giver mig da et ouput jeg kan arbejde videre med.
MEN - jeg er stødt på et andet problem.
I Outputtet er der dannet følgende:
Type
Pdword = ^dword;
FLX_ADMIN_FUNCTION = (TDummy,ADMIN_ENDOFDAY,ADMIN_ENDOFDAYLOG,
ADMIN_REPORT_TERMINALREPORT,ADMIN_REPORT_TOTALS,
ADMIN_REPORT_LOG,ADMIN_REPORT_OLDLOG,
ADMIN_LASTRECEIPT,ADMIN_UNLOCK_RECEIPT,
ADMIN_CLOCKSYNCPBS,ADMIN_CLOCKSYNCPOINT,
ADMIN_SENDLOG,ADMIN_CLEARDATASTORE,
ADMIN_DOWNLOADPROGRAM,ADMIN_DOWNLOADPARAM,
ADMIN_DOWNLOADPAN,ADMIN_DOWNLOADTLCMDB,
ADMIN_RESTORETLCMDB,ADMIN_CONTRASTUP,
ADMIN_CONTRASTDOWN,ADMIN_RESTARTTERMINAL,
ADMIN_EJECTCARD,ADMIN_MSC,ADMIN_MAX
);
(Dummy er indsat af mig, da ADMIN_ENDOFDAY i header filen har nummer 1. Jeg mener, at Delphi starter med 0).
function flxAdministration(func:FLX_ADMIN_FUNCTION; var error: PDword) : Integer; External 'flxdrv.dll';
Når jeg så vil kalde flxAdministration gør jeg følgende:
procedure TfrmMain.Terminalrapport1Click(Sender: TObject);
var
err : PDWord;
begin
ReturnResult := flxAdministration(ADMIN_REPORT_TERMINALREPORT,Err);
end;
Men det giver mig en fejl. Denne
Access Violation at adress 10005681 in module 'flxdrv.dll'. Write of adress 00485CFE.
Umiddelbart vil jeg tro, at det har noget at gøre med PDWord typen. Men jeg aner det ikke.
Siger det jer noget ?
Michael
--
Best Regards / Venlig hilsen
Michael Vilhelmsen
==========
Best Regards / Venlig hilsen
Michael Vilhelmsen
| |
Poul S. (17-08-2005)
| Kommentar Fra : Poul S. |
Dato : 17-08-05 16:16 |
|
"Michael Vilhelmsen"
<Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> skrev i en
meddelelse news:mn.8bb37d58e8314637.11460@Microcom.PLEASEREMOVE.Dk...
> Når jeg så vil kalde flxAdministration gør jeg følgende:
> procedure TfrmMain.Terminalrapport1Click(Sender: TObject);
> var
> err : PDWord;
> begin
> ReturnResult := flxAdministration(ADMIN_REPORT_TERMINALREPORT,Err);
> end;
> Men det giver mig en fejl. Denne
> Access Violation at adress 10005681 in module 'flxdrv.dll'. Write of
> adress 00485CFE.
> Umiddelbart vil jeg tro, at det har noget at gøre med PDWord typen. Men
> jeg aner det ikke.
> Siger det jer noget ?
-------------------------------
Lige som Uffe har skrevet til dig i en anden tråd, mener jeg at du SKAL
fortælle kompileren hvilken type kald er din dll import. Prøv at definere
funktionen således:
function flxAdministration(func:FLX_ADMIN_FUNCTION; var error: PDword) :
Integer; External 'flxdrv.dll'; stdcall;
Du kan læse mere om det ved at søge på "calling conventions" i Hjælpen til
Delphi.
--
Mvh. Poul
| |
Stig Johansen (18-08-2005)
| Kommentar Fra : Stig Johansen |
Dato : 18-08-05 04:34 |
|
Poul S. wrote:
> Lige som Uffe har skrevet til dig i en anden tråd, mener jeg at du SKAL
> fortælle kompileren hvilken type kald er din dll import. Prøv at definere
> funktionen således:
>
> function flxAdministration(func:FLX_ADMIN_FUNCTION; var error: PDword) :
> Integer; External 'flxdrv.dll'; stdcall;
Derudover skriver OP:
....
Type
Pdword = ^dword;
....
Ved kaldet er variablen error ikke allokeret, hvilket bør give en AV.
Endvidere kan der være tale om dobbeltkonfekt ved at benytte en pointer i
kombination med 'var' i funktionskaldet.
--
Med venlig hilsen
Stig Johansen
| |
|
|