C++ Behöver hjälp angående dll

Permalänk

C++ Behöver hjälp angående dll

Tjena,

jag är en självlärd amatör, så ber om ursäkt om jag använder fel termer i min förklaring.

Det är så att jag har skapat ett program som har en hel del användbara funktioner. Jag skulle vilja koppla detta program till mina framtida program för att kunna utnyttja funktionerna som ligger där i. Med lite efterforskning så har jag hittat att göra mitt program till en dll-fil är vad jag ska försöka göra, men hittade även att dll har en del nackdelar tex att programmet blir plattformsbundet och lite andra grejer. Ett annat alternativ verkar vara att använda scripting, vilket jag inte har någon erfarenhet av och det verkar även var ett extremt stort område.

Om någon snäll själ skulle ha tid och ork att ge lite tips om jag är inne på rätt spår, eller om det finns andra bättre alternativ, eventuellt ge lite generell information om scripting och Dynamic Link Library

Tack på förhand!

Permalänk
Medlem
Skrivet av Regnmakarn:

Tjena,

jag är en självlärd amatör, så ber om ursäkt om jag använder fel termer i min förklaring.

Det är så att jag har skapat ett program som har en hel del användbara funktioner. Jag skulle vilja koppla detta program till mina framtida program för att kunna utnyttja funktionerna som ligger där i. Med lite efterforskning så har jag hittat att göra mitt program till en dll-fil är vad jag ska försöka göra, men hittade även att dll har en del nackdelar tex att programmet blir plattformsbundet och lite andra grejer. Ett annat alternativ verkar vara att använda scripting, vilket jag inte har någon erfarenhet av och det verkar även var ett extremt stort område.

Om någon snäll själ skulle ha tid och ork att ge lite tips om jag är inne på rätt spår, eller om det finns andra bättre alternativ, eventuellt ge lite generell information om scripting och Dynamic Link Library

Tack på förhand!

Om du inte vill att det ska vara endast för windows så är väl det mest flexibla lösningen att du kan starta ditt program med parametrar.

Visa signatur

~. Citera så jag hittar tillbaka .~

Permalänk
Medlem

Du kan ju koda så det finns stöd för iaf Windows/Linux.
Sen kan du ju göra dll om du vill, eventuellt bara importera filerna till nästa projekt.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

Programbibliotek kan man ju skapa till fler plattformar än windows. Det är väl bara att kompilera det som ett bibliotek i exempelvis Linux om du vill det, fast filen kanske inte heter .dll då utan något annat (har för mig det kan vara .a eller kanske .o). Eftersom du har källkoden är det enkelt att flytta den till en annan plattform. Nu kan jag inte C++ men är det liknande C så brukar man skapa en header-fil där alla funktioner och externa variabler deklareras så att programmet som ska använda funktionerna får åtkomst till dessa när man inkluderar headerfilen. Sedan får man länka ihop det när man kompilerar programvaran.

Scripting är mer att man anropar diverse program via exempelvis en .bat fil eller bash-script. Så visst om du kör något kommandoradsbaserat program kan du ju anropa detta via ett script eller från ett annat program.

Permalänk

Att vad du vill göra är att skapa ett bibliotek (library) är ganska uppenbart det betyder inte att det behöver vara en dll. Du kan också välja att statiskt länka (olika typer av länkning och när de är bra att använda är alltid trevlig kvällsläsning) in kod som du använder. Om du är bekymrad över hur saker och ting skall bygg på olika plattformar så finns det verktyg för att hantera just den typen av problem CMake är ett utmärkt sådant byggsystem (build system, ännu ett bra ord att googla på och ha som kvällsläsning).

Permalänk
Datavetare

Svårt att svara exakt på vad som är rätt i ditt fall, saknas lite information om vilken typ av funktioner du menar när du säger att de ska återanvändas i andra program. Är den något väldigt fristående uppgift, som t.ex. att konvertera en fil from format A till format B som man inte anropar med någon större frekvens (d.v.s inte 100-tals eller fler gånger per sekund) så är det bästa kanske att låta ditt nuvarande program vara just ett separat fristående program.

Att exportera C++ funktioner ur en dll eller statiskt bibliotek är en väldigt dålig idé då C++ (till skillnad från t.ex. C och Java) inte har en specifikation för hur symbolnamn ska relatera sig till namn på funktioner/variabler i koden. Det betyder att i bästa fall blir ett C++ bibliotek specifikt till en viss kompilator, i värsta fall blir den specifik till en eller några versionen av en specifik kompilator. Detta är ett C++ problem, så allt detta gäller även om man kör med t.e.x g++ på *NIX

Microsoft är själva väldigt stora användare av C++, i princip alla deras produkter är skrivna i C++, insåg tidigt detta problem och tekniker som COM, C++/CX (används av WinRT/Modern UI) är binära specifikationer för att kunna exportera klasser och kunna anropa metoder på objekt på ett sätt som inte beror av specifik kompilatorversion. Nackdelen med alla dessa är att det inte är standard C++ så man binder sig vid Windows.

Vill du absolut skapa en dll så kan du definitivt skriva all logik i C++, men du måste exportera ett C-API mot din kod om du vill att det ska fungera tillförlitligt.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Intressant, jag kan ju inte C++ men vill gärna lära mig det så småningom. Hur fungerar då ramverk såsom Qt som är skrivna i C++ för många olika plattformar och olika programspråk? Är det tack vare ett C-API som det funkar? Eller är det löst på något annat sätt?

Men att det är bundet till en viss kompilator, är inte det mera om man distribuerar biblioteket binärt? Distribuerar man det i källkodsform så borde man väl teoretiskt kunna kompilera om biblioteket för den kompilatorversion man använder för tillfället? Är det egen kod som man själv vill återanvända eller om det är öppen källkod så finns källkoden tillgänglig och man blir inte beroende av en viss DLL-fil.

Permalänk
Datavetare
Skrivet av ronnylov:

Intressant, jag kan ju inte C++ men vill gärna lära mig det så småningom. Hur fungerar då ramverk såsom Qt som är skrivna i C++ för många olika plattformar och olika programspråk? Är det tack vare ett C-API som det funkar? Eller är det löst på något annat sätt?

Men att det är bundet till en viss kompilator, är inte det mera om man distribuerar biblioteket binärt? Distribuerar man det i källkodsform så borde man väl teoretiskt kunna kompilera om biblioteket för den kompilatorversion man använder för tillfället? Är det egen kod som man själv vill återanvända eller om det är öppen källkod så finns källkoden tillgänglig och man blir inte beroende av en viss DLL-fil.

Qt "löser" problemet med att g++ i praktiken varit kompatibel med sig själv väldigt länge och det är typiskt den kompilator man alltid använder. Under Windows gäller samma sak, i praktiken så har MSVC++ varit kompatibel med sig själv rätt länge. MSVC++ är dock inte kompatibel med g++, men _tror_ att clang++ är kompatibel med g++.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer