Avatar billede borrisholt Novice
20. juni 2005 - 11:22 Der er 8 kommentarer og
1 løsning

Lib til DLL

Hej Eksperter

Jeg har nogle .LIb filer som jeg skal bruge i et Delphi program. Det kan man ikke ! Så derfor tænkte jeg om det er muligt at hacke en lib fil om til en DLL fil, fårdi så er det bare hårdt arbejde der fra !

Jeg har IKKE kilde koden til .lib fillerne, og kan ikke få den !

Jens B
Avatar billede arne_v Ekspert
20. juni 2005 - 11:49 #1
Er de libs i COF eller OMF format ?
Avatar billede soreno Praktikant
20. juni 2005 - 12:23 #2
Du kan evt. bare lave en dll fil som kalder funktionerne
i lib filen og så bruge dll filen fra Delphi.

Det kræver at lib filen linkes statisk. Hvis den ikke kan
det, så linkes den dynamisk, hvilket vil sige at der
allerede findes en dll fil som du kan bruge.

Det kræver naturligvis at du finder ud af kaldkonvention
for dll filen.
Avatar billede borrisholt Novice
21. juni 2005 - 09:30 #3
Jeg har et lille problem. Jeg aner intet om .lib filer.  :o( Udover på et abstrakt plan hvad de er.

Så Arne_v jeg kan ikke svare dig på det med mindre du fortæller mig hvordan jeg finder ud af det.

soreno>> Ja det tænkte jeg nok, at det er sådan det skal gøres.  Men.......
der er mere end et lib med til "mit" api, så kan man kompilere dem alle  i og så bruge som en DLL ude fra, eller skal man vide hvilke funktioner der ligger i hvilke lib's ? og så den vej rundt ?

Jeg har naturligvis en headder fil som beskriver interfacet, men i den kan jeg ikke se hvilke funkktioner der ligger i hvilke libs.

Og ville det hjælpe nogen af jer hvis jeg sendte headder + lib. Ikke sådan at forstå en af jeg skulle lave mit arbejde, men mere hvis det kan opklare nogle ting så gør jeg gerne det.

Jens B
Jens B
Avatar billede soreno Praktikant
21. juni 2005 - 13:31 #4
Simpelt eksempel; jeg har en headerfil som indeholder funktionen closeQuoChannel, den koder jeg således:

#include "header.h"
[..]
__declspec (dllexport) void dll_closeQuoChannel()
{
    closeQuoChannel();

    #if DLL_DEBUG
        printf("*success* connection closed\n");
    #endif
}


Så hedder funktionen i dll filen "dll_closeQuoChannel" - for at undgå evig rekursion.
Så linker jeg bare med relevante libs, i dette tilfælde ét lib.

Hvis du har flere libs så linkes der også bare med dem. Ideen er at alle funktionerne i headerfilen kodes efter samme mønster som ovenstående eksempel.

Det skal lige siges at jeg har kun prøvet med 8 funktioner der kun brugte simple datatyper som char og int.

I mit tilfælde stillede leverandøren af en maskine kun et VC++ lib til rådighed og udviklingen skulle foregå i Delphi. Jeg fandt aldrig ud af om det var muligt at bruge lib direkte fra Delphi - men jeg er sikker på jeg prøvede mange forskellige ting før jeg gav op (men jeg er ikke Delphi mand, så det er bestemt ikke ensbetydende med at det ikke kan lade sig gøre).
Avatar billede borrisholt Novice
21. juni 2005 - 13:44 #5
soreno>> Jeg er Delphi mand og det kan ikke lade sig gøre. Det er linket "forkert" sammen til at Delphi kan forstå det.  Jeg har set et sted at man kan hacke et  VC++ lib om til et  C++ Builder lib  og der fra til wen C++ Builder obj fil, som Delphi så kan bruge. Meeeen manden kom ikke konkret ind på hvordan man gjorde.

Første skridt er nemt nok. Der har Borland lavet et tool, men det sidste ved jeg ikke hvordan man gør !!

Lige et side spørgsmål :
Lad os sige jeg har skrevet et SDK til et eller andet, fx. en fingerscanner, i Visual C++. Er det så ikke bare en opsætning i compileren om man vil have en DLL fil eller en lib fil  ?

Jens B
Avatar billede soreno Praktikant
21. juni 2005 - 14:40 #6
I sin tid brugte jeg følgende besværgelse:
cl dll_pcquo.c LibPcQuote.lib WS2_32.Lib /MD /LD

Hvor ovenstående eksempel er en delmængde af indholdet af dll_pcquo.c
og "LibPcQuote.lib WS2_32.Lib" er de libs jeg linker med.
Output var en DLL fil.

Jeg havde vist nok .NET sdk'en installeret - der medfølger en VC++ compileren.
Se evt. http://www.eksperten.dk/spm/443804
Avatar billede borrisholt Novice
06. juli 2005 - 08:12 #7
Jeg fik levrandøren til at lave en DLL til mig så er alle mine problemer løst ...

Smid et svar hvis der er nogen der vil have points. Ellers lukker jeg i morgen.

Jens B
Avatar billede soreno Praktikant
06. juli 2005 - 08:15 #8
Ok.
Det var nok også den bedste løsning - så er det jo i hvertfald ikke dig der har lavet eventuelle fejl i dll'en.. ;-)
Avatar billede borrisholt Novice
06. juli 2005 - 09:20 #9
soreno>> Lige præcis, også mente jeg når nu han alligevel har source coden kunne det ikke betyde så meget lige at flække en DLL sammen. Men tak for hjælpen under alle omstentighedder.

Jens B
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