Forum: PC-Programmierung *.dll´s in Projekt einbetten in MFC/Visual Studio


von Philipp G. (flashmaster)


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

von Klaus W. (mfgkw)


Lesenswert?

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).

von Philipp G. (flashmaster)


Lesenswert?

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

von Peter (Gast)


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.

von Philipp G. (flashmaster)


Lesenswert?

Ahhh das hilft mir schonmal weiter, dann begeb ich mich mal auf die 
Suche nach den lib´s ;)
Danke!

MfG Philipp

von Philipp G. (flashmaster)


Lesenswert?

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

von Klaus W. (mfgkw)


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.

von Philipp G. (flashmaster)


Lesenswert?

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

von Klaus W. (mfgkw)


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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

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
Noch kein Account? Hier anmelden.