05. april 2004 - 14:07Der er
8 kommentarer og 1 løsning
Dynamisk linkning af DLL'er
Hej!
Jeg er ved at lave en applikation hvor det vil være en fordel for mig at kunne lægge en række protokoller i dll'er og linke til dem dynamisk. Det skal laves sådan at der kan tilføjes nye protokoller blot ved at lægge en dll med den nye protokol i en bestemt mappe. Jeg er rimelig ny til dll'er og vil gerne vide om der er nogen der har / ved hvor man kan finde et godt eksempel på hvordan en sådan linkning kan foregå? Jeg har en fungerende applikation med protokoller, men uden dll'er.
Det skal lige siges at jeg arbejder i C++ med MFC til Pocket PC 2002, med Embedded Visual C++ 3.0. Det virker stort set ligesom Visual Studio 6, så man kan overfører det meste derfra!
int main() { test("a.dll"); test("b.dll"); return 0; }
C:\dll>cl a.cpp /LD Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
a.cpp Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:a.dll /dll /implib:a.lib a.obj Creating library a.lib and object a.exp
C:\dll>cl b.cpp /LD Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
b.cpp Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
/out:b.dll /dll /implib:b.lib b.obj Creating library b.lib and object b.exp
C:\dll>cl /GX test.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
test.cpp Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
Hej Arne! Det ser jo rimeligt tilforladeligt ud! Et lille spørgsmål før jeg accepterer svaret! Som jeg forstår koden skal jeg fra mit program kende dll'erne for at kunne kalde dem! Er det ikke muligt at lave koden på en sådan måde at jeg ikke kender dll'ernes navn ved compiletime, men kan linke dem ved run time????
I test.cpp er navnet på DLL'en bare en streng, så DLL'erne bruges hverken ved compile eller link af programmet (DLL'erne skal selvfølgelig buildes et eller andet sted).
Jeg har valgt at vise 2 hardcoded strenge. Du kan nøjes med 1 (den DLL implementation som skal bruges). Eller du kan gøre det konfigurerbart.
Lige et lille ekstra spørgsmål!! Hvordan kalder jeg en funktion i mit hovedprogram fra dll'en????? Jeg har kigget lidt på dllimport, men kan ikke rigtigt finde ud af den!
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.