Avatar billede videodyr Nybegynder
11. august 2002 - 23:44 Der er 8 kommentarer og
1 løsning

dller

Jeg har sat mig for at lære hvor man arbejde med dll-filer.

Hvis man nu lave en dll med en "class test" som eks.
  class test
  {
  private:
    String name;

  public:
    String modtag()
    {
      name = "hejsa";
      return name;
    }
  };

Hvis class ligge i ens program skal den jo bare kalds på følgene måde hent.modtag(); ......
Men hvis den ligge i en dll fil, hvordan kalder man så klassen???

Jeg håber der er nogen der kan hjælpe mig.
Jeg skal lige sige at jeg bruger C++ Buileder 5.
Avatar billede casperwollesen Nybegynder
13. august 2002 - 11:07 #1
Avatar billede casperwollesen Nybegynder
13. august 2002 - 11:11 #2
Jeg kender det kun fra MC++, og du bruger du en Definition File, i den kunne følgende funktioner stå som skal exporteres:

-------------------------
LIBRARY "dll.dll"

EXPORTS
    AddTwice
-------------------------

Så vil funktionen AddTwice kunne kaldes fra et andet program.

Men jeg kender kun til at gøre det ved funktioner, jeg har ikke prøvet med funktioner fra et objekt. Prøv eventuelt at slå op i hjælpen på Export. Håber det kan hjælpe lidt.
Avatar billede casperwollesen Nybegynder
13. august 2002 - 11:14 #3
Jeg ved man gør det samme i Delphi: Det ville man nederste i *.dpr filen indsætte:

exports
  I2COpen,
  GetMsg,
  SendMsg;

Og begge produkter er fra Borland, så jeg kunne tænke mig det er noget lignende.
Avatar billede casperwollesen Nybegynder
13. august 2002 - 11:21 #4
Har jeg ikke misforstået dit spørgsmål ? For jeg har svaret på hvordan du exportere funktioner, hvis du selv har skrevet dll'en. Vil du have svar på hvordan man kalder funktioner fra en dll ?
Avatar billede casperwollesen Nybegynder
13. august 2002 - 11:25 #5
Sådan kalder du en funktion, ved ikke om der findes andre lettere måder at gøre det i BCB på:
-------------------------------------
// Function pointer type
    typedef void (*MYFUNCTION)(char *, int);
   
    // Handle to the DLL
    HINSTANCE hDLL = 0;

    // Function pointer
    MYFUNCTION pfnTheFunction = 0;

    if((hDLL = LoadLibrary("mylib.dll")), hDLL) {
        // Successfully loaded library, find where function is
        pfnTheFunction = (MYFUNCTION)GetProcAddress(hDLL, "myfunction");

        if(pfnTheFunction) {
            // The function was found, so call it
            (*pfnTheFunction)("Run-time DLL message!", MB_YESNO);
        }

        // Free the loaded DLL
        FreeLibrary(hDLL);
    }
Avatar billede soepro Nybegynder
13. august 2002 - 13:02 #6
Sådan - og dertil skal så bare lige tilføjes at du *IKKE* kan tilgå variabler i DLL'en direkte - du skal lave en funktion du kan kalde, der henter værdien til dig:

test hent;

DLL_EXPORT String getModtag(void)
{
  return hent.Modtag();
}

(Hvor DLL_EXPORT erstattes med det som man nu skal skrive i sin DLL for at eksportere sin funktion.)
Avatar billede videodyr Nybegynder
20. august 2002 - 18:12 #7
slut
Avatar billede soepro Nybegynder
21. august 2002 - 11:13 #8
videodyr >> Burde de point ikke havde tilfaldet casperwollesen ! (Ifølge reglerne, så JO !)
Avatar billede casperwollesen Nybegynder
21. august 2002 - 11:20 #9
Jeg svarede på spørgsmålene, men han har aldrig svaret om han kunne bruge svarene. For hvis han har, burde de vel gå til mig.

Så det må være op til ham.

Casper W.
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

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