Avatar billede krukken Juniormester
15. marts 2004 - 13:59 Der er 21 kommentarer og
1 løsning

Includere dll i c++ program

Jeg har en fil med navn test.dll, osm jeg skal have inkludret i min c++ program, hvordan gør jeg det?

Jeg skal kalde funktionerne set,get og name.
Avatar billede krukken Juniormester
15. marts 2004 - 14:00 #1
Jeg bruger kompilere med Microsoft Visual C++(2003)
Avatar billede arne_v Ekspert
15. marts 2004 - 17:43 #2
Normalt har man både en .DLL og en .LIB og så linker man mod .LIB og den bruger
så .DLL

Man kan loade en DLL og bruge funktionerne i den dynamisk med kaldene
LoadLibrary og GetProceAddress

Og man kan generere en .LIB udfra en .DLL og så bruge første metode, men
jeg må indrømme at jeg ved ikke hvordan man gøre det for Visual C++
Avatar billede krukken Juniormester
15. marts 2004 - 17:45 #3
Jeg har også en lib. Kan du ikke lave et meget enkelt eksampel? Og meget gerne med nogle få kommentarer i. Jeg har siddet en hel dag og prøve at få det til at virke nu. Men det fungere bare ikke.

Skal man ikke også have en headerfiL?
Avatar billede arne_v Ekspert
15. marts 2004 - 17:49 #4
En header fil er et plus, men ellers må du selv lave erklæringerne udfra
den dokumentation som nu foreligger.

Der er ikke meget at lave eksempel om.

Du:
  * du includer en header fil eller erklærer selv funktionerne
  * du tilføjer .LIB til projektets libraries
  * du bruger funktionerne helt normalt
  * du builder helt normalt
Avatar billede krukken Juniormester
15. marts 2004 - 18:17 #5
Kan du ikke give mig et kodeeksempel - det er netop det jeg har siddet med hele dagen, og det burde være rigtig men det fungere ikke!
Avatar billede arne_v Ekspert
15. marts 2004 - 19:22 #6
Et kode eksmepel på hvad ?

Du kalder de funktioner på samme måde som alle mulige andre funktioner.

Alle standard C funktionerne og Win32 API funktionerne ligger også i DLL.

Det er er et opsætnings spørgsmål om at få linket korrekt.
Avatar billede krukken Juniormester
15. marts 2004 - 19:27 #7
Kan du så ikke forklare det helt præcist hvad du gør når du inkludere filerne - både lib og dll. Jeg ved at godt at jeg nok at lige "træls" men jeg er utrolig træt at det her ligenu!
Avatar billede arne_v Ekspert
15. marts 2004 - 19:29 #8
Du skal enten include en .H fil eller selv erklære de funktioner du skal bruge.

Du ska link mod .LIB filen.

.DLL filen skal være i PATH eller i samme dir som .EXE når programmet skal køres.
Avatar billede arne_v Ekspert
15. marts 2004 - 19:31 #9
I MS Vc++ 6 sætter man link libraries i:

project
settings
link

Det er sikkert lidt anderledes i 2003, men det må være til at finde.
Avatar billede krukken Juniormester
15. marts 2004 - 19:31 #10
vil de sige at headerfilen bare skal havde det sammen som dll filen.

eks: foreksempel.dll

foreksempel.h

indhold af foreksempel.h:
ifndef FOREKSEMPEL_U
define FOREKSEMPE_U
class foreksempel

public:

void set(int ged);
int get(void);
void print(void);

};
Avatar billede krukken Juniormester
15. marts 2004 - 19:32 #11
HOV.....

ifndef FOREKSEMPEL_U
define FOREKSEMPE_U
class foreksempel
{

public:

void set(int ged);
int get(void);
void print(void);

};
Avatar billede arne_v Ekspert
15. marts 2004 - 19:58 #12
C++ er et fleksibelt sprog - .H behøver ikke hedde det samme som .DLL, men
jeg vil sige at det vil være pænt at gøre det
Avatar billede arne_v Ekspert
15. marts 2004 - 19:59 #13
Jeg formoder at du mener:

#ifndef FOREKSEMPEL_H
#define FOREKSEMPEL_H

...

#endif
Avatar billede krukken Juniormester
15. marts 2004 - 22:22 #14
Jeps, det var nu mest hvordan du helt nøjagtig tilføjer både lib og dll filen! Gider du ikke at forklare mig det som jeg var en 6 årig. Jeg er ved at være temmelig træt af at det ikke virker!
Avatar billede arne_v Ekspert
15. marts 2004 - 22:32 #15
Jeg forklarede lib for Vc++ 6 i min 19:31:13 kommentar.

DLL kan bare smides i samme dir som EXE.
Avatar billede krukken Juniormester
15. marts 2004 - 22:37 #16
okay, og hvor skal dll filen ligge?
Avatar billede arne_v Ekspert
15. marts 2004 - 22:42 #17
Det nemmeste er bare at ligge den i samme dir som EXE filen.
Avatar billede krukken Juniormester
18. marts 2004 - 22:54 #18
Så har jeg sku få det meste til at virke tror jeg! Men sig mig lige en sidste ting. Hvis man skal give parametre med til funktionerne hvordan gør man så det? Kan du måske rette denne stump kode, så de får parametre med?
.................
HINSTANCE hLib=LoadLibrary("DLLTEST.DLL");

    if(hLib==NULL) {

          cout << "Unable to load library!" << endl;
          getch();
          return;
      }
    NumberList=(cfunc)GetProcAddress((HMODULE)hLib, "NumberList");
    LetterList=(cfunc)GetProcAddress((HMODULE)hLib, "LetterList");
    if((NumberList==NULL) || (LetterList==NULL)) {

          cout << "Unable to load function(s)." << endl;
          FreeLibrary((HMODULE)hLib);
          return;
    }

..............
Avatar billede krukken Juniormester
18. marts 2004 - 22:55 #19
Hvis andre skulle komme i knibe, så kig her: Det er her jeg har fundet mig inspiration! http://www.flipcode.com/tutorials/tut_dll01.shtml
Avatar billede arne_v Ekspert
19. marts 2004 - 17:28 #20
De erklærer bare argumenterne i cfunc, så kan du kalde NumberList og LetterList
med dem.
Avatar billede krukken Juniormester
19. marts 2004 - 18:53 #21
ligger du et svar? Nu har jeg vist selv fundet ud af det;-) Men tak for hjælpen.
Avatar billede arne_v Ekspert
19. marts 2004 - 18:54 #22
ok
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