Avatar billede yates Nybegynder
13. juli 2006 - 08:32 Der er 9 kommentarer og
1 løsning

deklarere funktioner i en DLL

Hej,

I VB og Delphi kan man deklarere externe funktioner i en DLL med en eneste linje (dvs man specificerer funktionens navn, argumenter, sti til dll, calling convention, returtype).
Er noget tilsvarende muligt med C (altså med en simpel linje) ??


Y.
Avatar billede arne_v Ekspert
14. juli 2006 - 01:25 #1
jeg mener at du er nødt til at bruge typedef, LoadLibrary og GetProcAddress
Avatar billede arne_v Ekspert
14. juli 2006 - 01:27 #2
eksempel:

typedef BSTR __stdcall (*VBFUNCPTR)(char *data);

...

  HINSTANCE md5;
  VBFUNCPTR md5hash;

  md5 = LoadLibrary("md5.dll");
  md5hash = (VBFUNCPTR)GetProcAddress(md5,"_MD5Hash@4");
  res1 = md5hash("Dette er en lille test");
Avatar billede yates Nybegynder
14. juli 2006 - 08:08 #3
Det er jo temmeligt besværligt og helt uigennemskueligt.
Trist trist. Her kunne man sørme godt udvide C-standarden.

Læg et svar, arne.
Avatar billede yates Nybegynder
14. juli 2006 - 08:34 #4
Hov jeg er ikke sikker på jeg fatter syntksen ovenfor.
Skal DLL'en loades på den måde hver gang jeg vil foretage et funktionskald?
Eller kan noget af ovenstående sættes ind i DllMain ?
Avatar billede arne_v Ekspert
14. juli 2006 - 13:50 #5
nej

LoadLibrary returnerer en HINSTANCE som du kan bruge i mange GetProcAddress
kald og den function pointer der returneres fra GetProcAddress kan også
kaldes mange gange
Avatar billede arne_v Ekspert
14. juli 2006 - 13:51 #6
og et svar
Avatar billede bertelbrander Novice
16. juli 2006 - 00:44 #7
DLL'er er heldigvis ikke en del af C eller C++ standarden og jeg tvivler meget på at det nogensinde bliver.

I C og C++ har man ikke (nødvendigvis) noget type information i en DLL (eller andre binære) filer og det vil dermed være ret svært at lave.

Det er ikke så meget anderledes end med objekt (og lib) filer, der er heller ingen måde at læse type på funktioner ud af dem; det bliver man nød til selv at holde styr på.
Avatar billede arne_v Ekspert
16. juli 2006 - 02:16 #8
der er ikke type information i en Win32 DLL

heller ikke selvom den kaldes fra VB eller Delphi

hvis man opgiver forkert signatur så får man en grim fejl

COM DLL'er har type information som kan bruges i f.eks. VB6

for Win32 DLL er forskellen på VB6 og C++ syntaktisk

i VB6 er det en erklæring, i C++ er det en runtime dynamisk load, men VB6 laver
i realiteten det samme som C++
Avatar billede bertelbrander Novice
16. juli 2006 - 17:08 #9
Jeg tænkte mere på .net, her kan man vist udtrække typeinformation fra dll'er?
Avatar billede arne_v Ekspert
16. juli 2006 - 20:10 #10
yep

en .NET DLL er reelt en 1:1 transformering af source koden til binære tokens

og ikke nok med at man kan få alle klasse definitioner etc. ud man kan
også nemt decompile dem til C# eller VB.NET efter eget valg - det eneste
som mangler er kommentarerne og navnene på de lokale variable
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



IT-JOB