Hallo zusammen, Ich habe mir eine grafische Benutzeroberfläche in MFC (Visual Studio 2010) gebastelt in dem ich einige externe Bibliotheken verwende um Daten visualisieren zu können. Zu dem greife ich dort auf eine Kamera zu, die bestimmte Bibliotheken (die als dll´s vorliegen) benötigt. Im Moment müssen diese dll´s im selben Ordner liegen wie meine erstellte .exe-Datei, damit man diese ausführen kann. Ist es möglich diese dll´s in die exe "einzubetten"? Bis heute dachte ich, dass man unter "Statisch Linken" genau dies versteht aber ich wurde eines besseren gelehrt. Hat da jemand eine Idee was man einstellen muss damit das funktioniert (falls es überhaupt möglich ist). MfG Philipp
Werden DLLs nicht auch in allen Pfaden aus PATH gesucht? Dann entweder in ein passendes Verzeichnis kopieren, oder PATH entsprechend erweitern (und dann VS neu starten).
Wenn ich das richtig verstehe, müssen dann trotzdem die dll´s auf dem Zielrechner vorhanden sein oder? Ich wollte eher eine Lösung wo alle benötigten Informationen bereits in der exe enthalten sind... gibt es sowas? MfG Philipp
wenn du Statisch Linken willst dann braucht du eine LIB eine dll kann man nicht mehr statisch liken. du kannst maximal versuchen die DLL in eine exe mit einzubauen und beim starten zu extrahieren. Die Sysinterals tools machen das so.
Ahhh das hilft mir schonmal weiter, dann begeb ich mich mal auf die Suche nach den lib´s ;) Danke! MfG Philipp
Sorry für den Doppelpost, Aber ich habe alle .lib´s (z.B. von der Kamera) ordnugsgemäß gelinkt, trotzdem fordert mein Programm beim Starten die gleichnamige .dll-Datei. MfG Philipp
Dann hast du keine statischen Libs, sondern nur die Libs, die zur DLL gehören. Unter Windows gibt es zwei Möglichkeiten: 1. dynamisches Linken gegen eine LIB, die nur etwas Blabla enthält und zur Laufzeit die DLL nachlädt, in der dann der Code enthalten ist 2. statisches Linken gegen eine Lib, die den Code der Bibliothek enthält, entsprechend größer st als im Fall 1 und keine DLL benötigt Wenn du nicht die Libs für den Fall 2 hast, musst auf dem Zielrechner die DLL liegen, wenn das Programm gestartet wird.
Also heisst das, ich befinde mich in Fall 1) und muss der Einfachkeithalber die .dll´s mitschleppen!? Naja schade aber trotzdem vielen Dank für die Mühe! MfG Philipp
Peter schrieb: > du kannst maximal versuchen die DLL in eine exe mit einzubauen und beim > starten zu extrahieren. Die Sysinterals tools machen das so. Das geht, aber dann kann man nicht normal Linken und die DLL-Funktionen einfach aufrufen (weil die DLL ja beim Programmstart schon vorhanden sein müsste), sondern man muß beim Start die DLL ablegen, dann die erzeugte DLL nachladen mit LoadLibrary() und mit GetProcAddress() o.s.ä. die Adressen der Funktionen holen, dann über die Funktionszeiger erst die Funktionen aufrufen.
Du kannst so ein Tool hier benutzen http://www.sharewareconnection.com/dll-to-lib.htm um aus deiner DLL eine funktional gleichwertige Lib zu bekommen, gegen die dein EXE statisch gelinkt werden kann. Das ist dann eine echte statische Lib und keine Import Library.
Sowas kann funktionieren, muss aber nicht. Eine DLL kann auch aktiven Code enthalten, der beim Laden automatisch ausgeführt wird (der steht dann in DllMain()), und dieser Code bleibt bei Konvertierungen i.d.R. auf der Strecke. Beispiele dafür sind ActiveX-DLLs, die über regsvr32 im System "installiert" werden müssen. Dennoch: Probier's aus, vielleicht hast Du ja Glück und die DLLs sind konvertierbar. Eine Alternative wäre die Verwendung eines der Werkzeuge, die für das Erzeugen "portabler" Anwendungen genutzt werden, die packen das eigentliche Exe-File und die komplette benötigte Umgebung mit DLLs und auch Registryinhalten in einen wiederum als Exe-File auftretenden Container. http://www.vmware.com/products/thinapp/ ist ein Beispiel für derartige Produkte. Nein, das ist keine Virtualisierung, auch wenn's von VMware kommt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.