*.dll´s in Projekt einbetten in MFC/Visual Studio

OP #1966150
Lesenswert?

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
Gast #1966165
Lesenswert?

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.
#1966205
Lesenswert?

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.
#1966215
Lesenswert?

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.
Persönliche Seite #1966328
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren