www.mikrocontroller.net

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


Autor: Philipp G. (flashmaster)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Philipp G. (flashmaster)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp G. (flashmaster)
Datum:

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

MfG Philipp

Autor: Philipp G. (flashmaster)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp G. (flashmaster)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.