Avatar billede winkill Nybegynder
27. marts 2000 - 13:45 Der er 11 kommentarer og
1 løsning

DLL driving me crazy!

Hej alle.

Jeg er ved at lave min første DLL i BCB4 men fa'me om lortet vil virke.

Er der en venlig sjæl der vil lave et kort eksempel til mig indeholdende.

En dll med to funktioner - eks en der skriver Hello World og en der skriver Hallo Verden.

Et console der kalder de to funktioner i ovenstående dll.
Avatar billede Slettet bruger
27. marts 2000 - 16:29 #1
lytter med :-)
Avatar billede skovlunde Nybegynder
27. marts 2000 - 23:56 #2
Som regel er problemt i hvordan du eksporterer funktionerne..Så hvordan gør du det? (og har du slået name mangling fra osv...)
Avatar billede winkill Nybegynder
27. marts 2000 - 23:59 #3
Tal dansk... ;o)

Jeg har ingen ide om hvad name mangling er og hvad det bruges til, så svaret er nok nej.
Avatar billede Slettet bruger
28. marts 2000 - 12:25 #4
Jeg har lige købt bogen "C++" fra IDG, af Kris Jamsa.
Sådan udskriver du hello world, i dos:

#include <iostream.h>

void main(void)
{
    cout << "Hello world!!";
}
Avatar billede winkill Nybegynder
28. marts 2000 - 13:05 #5
christian-t > Ja, men pakker du det lige ind i en dll og laver en exe der gør det samme - ved at kalde funktionen i dll filen ?
Avatar billede dmk Nybegynder
29. marts 2000 - 15:13 #6
Hejsa.

Jeg har lige lavet et lille eksempel. Jeg ved ikke om du kan bruge det til noget, men here goes...

Lav et dll projekt. lave en cpp fil indeholdende følgende funktion:
//---------------------------------------------
#include <stdio.h>

void function1()
{
  printf("Hello World\n");
}
//---------------------------------------------

Lav derefter en interface.def fil, og tilføj den til dit projekt. Interface.def er en fil hvor man kan definere de inports og eksports man vil have til sin dll. En import er en funktion man ønsker at benytte fra en anden dll. En eksport er en funktion du ønsker at stille til rådighed for brugerene af din dll.

I filen skriver du følgende:

EXPORTS
hello1 = function1

Det betyder følgende: Eksporter min funktion med navnet "function1", og kald den "hello1". Når andre bruger din dll vil de kunne se en funktion der hedder "hello1", og når de kalder den kalder de i virkeligheden "function1".

Compile Dll projektet.

Lav dit console projekt, og lav følgende main:

#include <windows.h>
#include <stdio.h>

//int lala(void* l) {};
typedef void (*DllFunction)();

//---------------------------------------------
void main()
{
  printf("Loading dll\n");
  HINSTANCE Lib=LoadLibrary("libtest.dll");
  if (Lib==NULL) printf("error loading library\n");
  else
  {
    printf("Library loaded\n");
    DllFunction Function=(DllFunction)GetProcAddress(Lib, "hello1");
    if (!Function) printf("Error getting function entry point\n");
    else
    {
      printf("Function entry found. Executing function...\n");
      Function();
    }
    FreeLibrary(Lib);
  }
  getchar();
}
//---------------------------------------------

Dette skulle gerne kunne gøre det! Bemærk i øvrigt lige, at når man vil have en funktions adresse, skal man selv vide hvilke parametre den funktion tager, og hvilken returtype den har. Hvis du gør det galt, vil der ske "sjove" ting.

Held og lykke!

DMK
Avatar billede kh@ingenioer Nybegynder
29. marts 2000 - 15:37 #7
Det er derfor man har header(*.h) filer
Avatar billede winkill Nybegynder
29. marts 2000 - 17:18 #8
DMK > Ok, tak, det virker så langt som til når den skal sætte Function = hello1 (Linien siger DllFunction Function=(DllFunction)GetProcAddress(Lib, "hello1");). Det lykkedes åbenbart ikke, så det er nok DEF filen den er galt med. Jeg har kun skrevet:
EXPORTS
hello1 = function1
i interface.def - gemt den og addet den til mit dll projekt.

Anyways, jeg er kommet en del længere end før.
Avatar billede dmk Nybegynder
29. marts 2000 - 17:22 #9
Okay, jeg er smuttet for i dag, men hvis du finder ud af mere, så skriv endelig dine spørgsmål her, så kigger jeg på det i morgen.

I øvrigt, hvis du vil se hvad funktionerne hedder i din dll, så højreklick på din dll, vælg Quick View og se under Export Table. Her står dine funktioner.

DMK
Avatar billede kh@ingenioer Nybegynder
29. marts 2000 - 17:32 #10
jeg har prøvet programmet af - det virker fint.
Har du husket at kopiere .dll filen over i det bibliotek, hvor de skal bruges?
Avatar billede winkill Nybegynder
30. marts 2000 - 09:30 #11
Ja, er det nødvendigt at tilfæje den et sted i regedit også ?
Avatar billede winkill Nybegynder
30. marts 2000 - 09:31 #12
dmk -> Tak, det ser jeg lige på når jeg kommer hjem - det kunne jo måske vise et'o andet..
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