# C Dll erstellen



## DarKo87 (26. September 2012)

Hallo,

Ich suche nach eine Deutschen Tutorial eine DLL zu erstellen.
Also ich schreibe eine c.file und die wandel ich dann in eine DLL oder so.

Muss man dabei eigentlich noch etwas beachten?

Gruß


----------



## Jennesta (26. September 2012)

Hi,
schau mal hier bei Tutorials.de http://www.tutorials.de/content/356-dll-erstellen-und-eigene-programme-einsetzen.html.
Ich kann dir nur leider nichts genaues dazu sagen, da ichs noch nicht selbst gemacht habe.

Grüße Jennesta


----------



## DarKo87 (27. September 2012)

Ja das hab ich auch schon gefunden, leider hilft mir das nicht. Ich arbeite mit Eclipse und irgendwie kann er die Dateien nicht compilieren. Ach man, das nervt das es im internet einfach mal nix hilfreiches gibt -.-'


----------



## DarKo87 (27. September 2012)

Irgendwie glaub ich das nicht, das es im Internet kein Vernünftiges Tutorial gibt damit man mit C eine verdammte DLL erstellen kann. Das mit den Code:Blocks funktioniert einfach nicht. Hab es schon zich mal probiert, er will die Datei einfach nicht Komplilieren ... -.-' *NERV*


----------



## deepthroat (27. September 2012)

DarKo87 hat gesagt.:


> Irgendwie glaub ich das nicht, das es im Internet kein Vernünftiges Tutorial gibt damit man mit C eine verdammte DLL erstellen kann. Das mit den Code:Blocks funktioniert einfach nicht. Hab es schon zich mal probiert, er will die Datei einfach nicht Komplilieren ... -.-' *NERV*


Vermutlich hast du einfach etwas falsch gemacht. Zeig den Code und die Fehlermeldung.

Code::Blocks generiert übrigens problemlos ein fertiges + lauffähiges DLL Projekt über den Neues Projekt Wizard.

Gruß


----------



## DarKo87 (27. September 2012)

Also ich nutze momentan die Demo aus dem Tutorial.


```
-------------- Build: default in Console application ---------------

Compiling: console.cpp
C:\Documents and Settings\uidt6173\My Documents\Downloads\demo\demo\console.cpp: In function 'int main()':
C:\Documents and Settings\uidt6173\My Documents\Downloads\demo\demo\console.cpp:14: warning: deprecated conversion from string constant to 'char*'
C:\Documents and Settings\uidt6173\My Documents\Downloads\demo\demo\console.cpp:22: warning: deprecated conversion from string constant to 'char*'
Linking console executable: console.exe
d:/program files/codeblocks/mingw/bin/../lib/gcc/mingw32/4.4.1/../../../../mingw32/bin/ld.exe: cannot find -llog
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 1 seconds)
1 errors, 2 warnings
```


----------



## deepthroat (27. September 2012)

Ja, die Fehlermeldung ist doch eindeutig, die Bibliothek "log" konnte nicht gefunden werden.

Hast du diese denn schon erstellt?

Und auch den Pfad zum Library-Path in den Projekteinstellungen hinzugefügt?


----------



## DarKo87 (27. September 2012)

Haha, manchmal ist nicht so eindeutig wie es sein sollte ;-) Wenn man sich mal wieder über dinge ärgert übersieht man doch oft das ofensichtliche 

Jetzt wo du es aber ansprichst seh ich den Fehler auch. Die Log.dll / Log.lib wie im Tutorial beschrieben, wo findet man die?


----------



## deepthroat (27. September 2012)

DarKo87 hat gesagt.:


> Jetzt wo du es aber ansprichst seh ich den Fehler auch. Die Log.dll / Log.lib wie im Tutorial beschrieben, wo findet man die?


Die mußt du erstellen. Das ist doch der Sinn des Tutorials: wie erstelle ich eine DLL.

Vermutlich mußt du nur das enthaltene Codeblocks Projekt öffnen und "Erstellen" klicken...

Gruß


----------



## DarKo87 (27. September 2012)

Ja für mich ist an dieser Stelle das Tutorial halt etwas unverständlich.



> Unter den Projekt Einstellungen kann man noch die Ausgabedatei festlegen.
> Ich habe dafür „log.dll“ gewählt.
> Wenn alles erledigt ist brauchen wir Code:Blocks nur noch die DLL erstellen lassen.
> Code::Blocks hat nun „log.dll“ und „liblog.a“ erstellt.



Ich klicke also Rechts auf das Projekt -> Properties -> und dann? Wo stell ich das richtig ein?
Bei Build Targets? Da hab ich drin stehen log.dll bei "Output filename"

Trotzdem sagt er mir immer noch 


```
ld.exe||cannot find -llog
```


----------



## deepthroat (27. September 2012)

DarKo87 hat gesagt.:


> Ich klicke also Rechts auf das Projekt -> Properties -> und dann? Wo stell ich das richtig ein?
> Bei Build Targets? Da hab ich drin stehen log.dll bei "Output filename"


Das trifft auf das "dll" Codeblocks Projekt zu, du versuchst aber das "console" Projekt zu erstellen.

Auf dem "Console application" Projekt, Rechtsklick, dann "build options...", in "Search directories" -> "Linker" den korrekten Pfad zu "libdll.a" eintragen.


----------



## DarKo87 (27. September 2012)

Also entweder seh ich den Wald vor lauter bäumen nicht oder ich drück mich falsch aus.

Ich habe die Demo.zip aus dem Tutorial heruntergeladen. Von daher müsste es sich, laut des Autors um ein dll Projekt handeln. Die einstellungen müssten also schon gesetzt sein. Leider aber, tut er mir keine Datein erstellen, keine dll und auch nichts anderes. Ich raff das einfach nicht ... -.-' Tut mir echt leid, manchmal ... dauerts länger bis es hier hinterm bildschirm mal klick macht ... *nerv*


----------



## deepthroat (27. September 2012)

Es gibt in dem demo.zip 2 Codeblocks Projekte: das DLL Projekt und das Console Projekt.

Du mußt beides kompilieren, erst die DLL, dann die Anwendung.


----------



## DarKo87 (27. September 2012)

Das funktioniert leider auch nicht


```
Compiling: dll.cpp
C:\...\demo\demo\dll.cpp: In constructor 'log_creator::log_creator()':
C:\...\demo\demo\dll.cpp:14: warning: deprecated conversion from string constant to 'char*'
C:\...\demo\demo\dll.cpp: In member function 'void log_creator::log(char*)':
C:\...\demo\demo\dll.cpp:33: error: 'time' was not declared in this scope
C:\...\demo\demo\dll.cpp:36: error: 'localtime' was not declared in this scope
C:\...\demo\demo\dll.cpp:37: error: 'strftime' was not declared in this scope
C:\...\demo\demo\dll.cpp: In member function 'void log_creator::log(std::string&)':
C:\...\demo\demo\dll.cpp:54: error: 'time' was not declared in this scope
C:\...\demo\demo\dll.cpp:57: error: 'localtime' was not declared in this scope
C:\...\demo\demo\dll.cpp:58: error: 'strftime' was not declared in this scope
C:\...\demo\demo\dll.cpp: In member function 'void log_creator::open_log(char*)':
C:\...\demo\demo\dll.cpp:74: warning: deprecated conversion from string constant to 'char*'
C:\...\demo\demo\dll.cpp: In member function 'void log_creator::close_log()':
C:\...\demo\demo\dll.cpp:84: warning: deprecated conversion from string constant to 'char*'
Process terminated with status 1 (0 minutes, 0 seconds)
6 errors, 3 warnings
```

Erstmal nen kaffee holen und dann nochmal in alle ruhe drüber schauen


----------



## deepthroat (27. September 2012)

Du mußt den Code berichtigen.

Die time, localtime Funktionen sind in time.h deklariert, also mußt du in C++ "ctime" einbinden:

```
#include <ctime>
```


----------



## DarKo87 (27. September 2012)

Ich danke dir für die mühe! ES FUNKTIONIERT ... so jetzt gehts dran, das ganze noch zu verstehen :-D
Haste vielleicht noch ein paar tuts parat?


----------

