Avatar billede manse80 Nybegynder
31. marts 2004 - 11:25 Der er 7 kommentarer

Hvordan includerer man en dll-fil til et program?

Jeg skal bruge en dll-fil i til min kode, men jeg kan ikke finde ud af, hvordan jeg skal inkludere den.
Avatar billede jakobdo Ekspert
31. marts 2004 - 11:45 #1
#include <stdio.h>
#include <windows.h>

typedef VOID (*MYPROC)(LPTSTR);

VOID main(VOID)
{
    HINSTANCE hinstLib;
    MYPROC ProcAdd;
    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
   
    // Get a handle to the DLL module.
    hinstLib = LoadLibrary("Dnsapi.dll");
   
    // If the handle is valid, try to get the function address.
    if (hinstLib != NULL)
    {
        printf("+ LoadLibrary()\n");
        ProcAdd = (MYPROC) GetProcAddress(hinstLib, "DnsQuery_A");
       
        // If the function address is valid, call the function.
        if (NULL != ProcAdd)
        {
            printf("+ GetProcAddress()\n");
            fRunTimeLinkSuccess = TRUE;
            printf("message via DLL function\n");
        }
        else
        {
            printf("- GetProcAddress() - Errorcode: %d\n",GetLastError());
        }
       
        // Free the DLL module.
        fFreeResult = FreeLibrary(hinstLib);
    }
    else
    {
        printf("- LoadLibrary() - Errorcode: %d\n",GetLastError());
    }
   
    // If unable to call the DLL function, use an alternative.
    if (! fRunTimeLinkSuccess)
        printf("message via alternative method\n");
}
Avatar billede arne_v Ekspert
31. marts 2004 - 12:35 #2
Normalt får du 1 .h + 1 .lib + 1 .dll og så kan du:
  include .h
  linke med .lib
  køre med .dll i PATH

Ellers kan du bruge LoadLibrary og GetProcAddress som i Jakobs glimrende
eksempel.
Avatar billede jakobdo Ekspert
04. april 2004 - 14:19 #3
Kunne du bruge mit eksempel?
Eller skal du bruge mere info?
Avatar billede skrewz Nybegynder
12. april 2004 - 17:43 #4
En ting, undskyld for at bruge spørgsmålet, som undrer mig, er: Hvorledes benytter man sig af en function, som residerer i DLL'en?
Det ligner, i M$'s eget eksempel (http://msdn.microsoft.com/library/en-us/dllproc/base/using_run_time_dynamic_linking.asp) som om man skal bruge MYPROC'en som pladsholder for et funktionsnavn?
Linjen "printf("message via DLL function\n");" betyder /* gør noget her */, eller forstår jeg det ikke?
Avatar billede jakobdo Ekspert
12. april 2004 - 18:28 #5
Altså i MS eksemplet, der er ProcAdd sådan set funktionen (DnsQuery_A)
Så du kan så kalde: ProcAdd(bla,bla,bla,bla,bla,blaaaa);
Ligesom du ville kalde:
DnsQuery(
  PCSTR lpstrName,
  WORD wType,
  DWORD fOptions,
  PIP4_ARRAY aipServers,
  PDNS_RECORD* ppQueryResultsSet,
  PVOID* pReserved
);
Avatar billede skrewz Nybegynder
12. april 2004 - 18:48 #6
..."_A"?

Anyhow, min kompiler beklager sig over at jeg mangler et argument til en funktion i DLL'en, som er argumentsløs...?

(Skal jeg oprette et spørgsmål, selv, eller er dette inaktive spørgsmål udmærket?)
Avatar billede jakobdo Ekspert
12. april 2004 - 21:18 #7
DnsQuery_A (for ANSI encoding)
DnsQuery_W (for Unicode encoding)
DnsQuery_UTF8 (for UTF-8 encoding)

Prøv evt at oprette et spørgsmål, dog ikke sikker på jeg kan løse, men du får da bedre fokus på problemet! :o)
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