Avatar billede zerohero Nybegynder
15. december 2003 - 06:16 Der er 26 kommentarer og
1 løsning

Vedrørende DLL

Er det virklig kun procedurer og funktioner jeg kan hente fra en DLL? Hvad med klasser, records og andre typer? Jeg læste i Delphi's hjælpefil at man ikke kan hente globale varianter fra en DLL, men betyder det også typer og konstanter?
Avatar billede cms Nybegynder
15. december 2003 - 08:45 #1
Ja - du kan ikke direkte hente typer fra en dll.
Dertil kommer varianter af dll-filen som fx Borland's bpl-filer; de kan indeholde alt det du kender fra units - dvs. procedurer/funktioner, typer, herunder klasser og variable.
Avatar billede cms Nybegynder
15. december 2003 - 08:47 #2
Vil du lave et plugin-system?
Avatar billede cms Nybegynder
15. december 2003 - 08:53 #3
Men det kan jo selvfølgelig 'omgås' en smule.
Hvis du vil have en række konstanter liggende i en dll-fil, så kan du jo bare tilføje en funktion ReadConstant(ConstantID: Integer): Pointer; og eksportere denne fra dll'en.
Records er jo blot en angivning af / strukturering af data.. og fylder som sådan ikke noget i din kode ved deklarationen. Det gør derfor ingen forskel hvor en record er deklareret, men hvis det er nødvendigt, at dll-filen skal fungere som plugin og dermed have magt til at ændre i en record's struktur, kan du lave nogle funktioner som fx:

function CreateRecord: Pointer;
procedure AddRecordValue(RcdHandle: Pointer; ItemId: Integer; Value: Pointer; SizeInBytes: Integer);
procedure DelRecordValue(RcdHandle: Pointer; ItemId: Integer);
procedure DisposeRecord(RcdHandle: Pointer);
Avatar billede cms Nybegynder
15. december 2003 - 08:54 #4
Klasser er nok det eneste som vil være ret besværligt manuelt at skulle eksportere/importere via en dll.
Avatar billede cms Nybegynder
15. december 2003 - 08:57 #5
Men så igen har Microsoft jo udviklet COM-teknologien hvormed du faktisk har objektorienteret adgang til en dll-fil (dvs. klasser) ! *Plus* at man kan have typer som fx enumerations, records/structs osv..
Avatar billede cms Nybegynder
15. december 2003 - 08:57 #6
:o)
Avatar billede zerohero Nybegynder
15. december 2003 - 09:05 #7
Ja, det er faktisk en slags plugin system, jeg godt kunne tænke mig at lave. Men det skal være en måde, som også er kompatibel med andre sprog (C++) og det DLL jo. Jeg ved ikke om COM er det, faktisk ved jeg ikke så meget om COM over hovedet!!!!
Avatar billede cms Nybegynder
15. december 2003 - 09:07 #8
Jeps COM/ActiveX/Ole er kompatibelt på tværs af sprog.
Avatar billede zerohero Nybegynder
15. december 2003 - 09:10 #9
Kan jeg ikke lave noget lign.

type
  TTest = record end;
  stdcall = TTest;

Det kan jeg i hvertfald godt kompile!
Avatar billede zerohero Nybegynder
15. december 2003 - 09:11 #10
Kan du ikke give et eksempel med en klasse og en COM?
Avatar billede cms Nybegynder
15. december 2003 - 09:12 #11
:D
1) nej, desværre
2) jow men det er lidt mere avanceret end som så.
hvilken version af delphi har du?
Avatar billede zerohero Nybegynder
15. december 2003 - 09:15 #12
Jeg bruger 4!
Avatar billede zerohero Nybegynder
15. december 2003 - 09:16 #13
Hvad er ulemperne eller forskellen med COM og ActiveX og Ole?
Avatar billede cms Nybegynder
15. december 2003 - 09:16 #14
oky, jeg har selv 5-7.
gå ind i delphimappen\demos\activex\oleauto og snus lidt rundt. Her er eksempler på brug af activex/com
Avatar billede cms Nybegynder
15. december 2003 - 09:17 #15
Det er navne for samme teknologi
Avatar billede zerohero Nybegynder
15. december 2003 - 09:19 #16
Er der forskel mellem fleksibilitet of hastighed mellem DLL og COM?
Avatar billede cms Nybegynder
15. december 2003 - 10:11 #17
jeg har lavet en lille demo:
http://e.innovision.it/Delphi/PluginDemo.zip
Avatar billede cms Nybegynder
15. december 2003 - 10:13 #18
Altså et COMobjekt ligger i en dll!
Men COM er langsommere end dll'er, men det kan sagtens omgås.
Det kan fortælles at Internet Explorer og de forskellige Windows Scripting sprog (VBScript og JScript) også bygger på COM (Component Object Model)
Avatar billede cms Nybegynder
15. december 2003 - 10:13 #19
(eller i en exe, eller i en ocx m.v..)
Avatar billede cms Nybegynder
15. december 2003 - 10:14 #20
hvis den ikke virker skal du lige fjerne PluginInterfaces fra MainApplication.dpr
Avatar billede zerohero Nybegynder
15. december 2003 - 10:26 #21
Jamen det ser jo meget fornuftigt ud det hele... :)) Jeg forstår bare ikke din SamplePlugin_TLB unit. Hvordan finder du ud af TGUID (De lange nummere) er det noget du bare opdigter eller har det en logisk forklaring? Og hvad betyder de?
Avatar billede cms Nybegynder
15. december 2003 - 10:29 #22
Det laver Delphi (som benytter windows api'et) for mig. Det står for Global Unique IDentifier, kernen i Windows' registrering af klasser.
I delphi kan du bede den om at lave dig en ny GUID ved at trykke Ctrl+Shift+G
Avatar billede zerohero Nybegynder
15. december 2003 - 10:34 #23
Ahaaa.... der går et lys op for mig :))
Avatar billede zerohero Nybegynder
15. december 2003 - 10:37 #24
Noget der lige sprang mig i øjene...

{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}

Hvad betyder de? Jeg kan ikke finde beskrivelse i hjælpefilen...

Det er da helt sikkert noget jeg skal lege lidt med :)) Tusind tak for din demo!
Avatar billede zerohero Nybegynder
15. december 2003 - 10:38 #25
Jeg forhøjede lige points... da du ærligt har fortjent dem :))
Avatar billede cms Nybegynder
15. december 2003 - 13:39 #26
najj takk :D
øhh du skal ikke tage dig af de 3 compiler directives, dem laver delphi selv for at kunne kompilere skidtet. hele det unit bliver genereret automatisk. prøv at trykke f12 når du er i det unit så ser du der hvor det hele sker. type library editoren.
Avatar billede cms Nybegynder
15. december 2003 - 13:40 #27
prøv iøvrigt at lege med "ActiveX"-fanebladet hvis du går op i Delphi->File->New...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester