Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 11.07.2004, 19:57 Titel: dll - Bibliothek erstellen |
|
|
ich hab vor einige meiner schönen DirectX Funktionen in eine dll zu schreiben. Das hätte mehrere Vorteile:
- Das Projekt ist aufgeräumter, da es deutlich weniger Quellcodedateien hat
- man mus nicht wenn man ein neues Projekt beginnt zig Dateien kopieren
- Man könnte das ganze veröffentlichen, so das andere Programmierer die Funktionen nutzen können, sie aber nicht verändern oder denb Quellcode klauen können
Weiß jemand wo es dazu Tutorials gibnt, oder ist das ganze so einfachk das man es mal eben schnell erklären könnte? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 11.07.2004, 20:09 Titel: |
|
|
Schreib dir solche Tuts doch einfach selber, du hast es doch programmiert und weisst deshalb wie man es am leichtesten nutzen kann, Spass macht es auch noch _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 11.07.2004, 20:11 Titel: |
|
|
ich glaube, er will wissen, wie man eine dll-Datei erstellt...
cu Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 11.07.2004, 20:19 Titel: |
|
|
jo, genau die Klassen sind alle fertig und auf verschiedene Dateien verteilt. Jetz würd ich gern wissen, wie man sie in ne dll packt und im Programm auf sie zugreifen kann. Ich schätze mal das geht mit .lib Dateien die man dem Projekt hinzufügt.
Mann kann ja in VC++ verschiedene Projekte wählen z. B. Win32 dll oder Library. Ich hab leider keine Ahnung was ich nehmen muss, und wie ich dann aus meinen Quellcodedateien die dll und die .lib mache _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Samus_Aran JLI'ler
Alter: 37 Anmeldedatum: 12.05.2004 Beiträge: 183 Wohnort: Plauen->des liegt in Sachsen in der nähe von Chemnitz und Zwickau Medaillen: Keine
|
Verfasst am: 11.07.2004, 21:42 Titel: |
|
|
mmh haste die sachen als klassen oder direkt als funktionen gemacht??? |
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 12.07.2004, 00:01 Titel: |
|
|
einen speziellen link hab ich nicht, ich hab mir das aus diversen quellen zusammengesucht, aber ich kann mal code posten. kann sein, dass unnötige sachen dabei sind, so sollte es aber mal funken:
man erstelle ein win32-dll projekt...
MyEngine.h
Code: |
#ifndef _MYENGINE_
#define _MYENGINE_
// eine konstante definieren, die vor allen
// klassen/funktionen steht, die exportiert werden sollen
#ifdef MYENGINE_EXPORTS
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
#pragma warning(disable : 4786)
#pragma warning(disable : 4251)
#include <windows.h>
...
// der handle der dll
extern HMODULE g_hDllHandle;
// function forwards
MY_API bool myEngineInit(void);
MY_API bool myEngineShutdown(void);
#endif
|
MyEngine.cpp
Code: |
#include <MyEngine.h>
HMODULE g_hDllHandle = NULL;
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpvReserved)
{
g_hDllHandle = hModule;
return TRUE;
}
MY_API bool myEngineInit(void)
{
// COM schnittstelle initialisieren
if (FAILED(CoInitialize(NULL)))
return false;
return true;
}
MY_API bool myEngineShutdown(void)
{
// COM herunterfahren
CoUninitialize();
return true;
}
|
wenn du das mal kompilierst, bekommst du eine .lib und .dll datei.
in deinem spiel musst du in options->directories include und library verzeichnisse angeben. und bei settings->link die lib datei linken...genau wie bei DX.
jetzt kannst du vor der nachrichtenschleife myEngineInit() und nach der schleife myEngineShutdown() aufrufen.
ein #include "MyEngine.h" darf auch nicht fehlen..
wenn das alles funkt, kannst du deine klassen in die dll packen, du musst nur darauf achten, dass du bei klassen, die du von 'außen' aufrufen willst, MY_API deklarierst: class MY_API MyClass {.....};
das sollte eigentlich alles sein, hier gibts ein kapitel über dll's, ich finde es aber eher verwirrend...das ist übrigens das ganze 'C++ in 21 Tagen' buch online. |
|
Nach oben |
|
|
Samus_Aran JLI'ler
Alter: 37 Anmeldedatum: 12.05.2004 Beiträge: 183 Wohnort: Plauen->des liegt in Sachsen in der nähe von Chemnitz und Zwickau Medaillen: Keine
|
Verfasst am: 12.07.2004, 07:11 Titel: |
|
|
sagen wir mal ich will meine Direct3D9 und Sprite Klassen und so in eine dll schmeissen wie bekomm ich das hin das danach alle noch einwanfrei funzt und ich später aus der dll raus noch meine Klassen ableiten kann??? |
|
Nach oben |
|
|
Sec Junior JLI'ler
Anmeldedatum: 18.09.2002 Beiträge: 88
Medaillen: Keine
|
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 12.07.2004, 11:50 Titel: |
|
|
Chewie hat Folgendes geschrieben: | wenn du das mal kompilierst, bekommst du eine .lib und .dll datei. |
Hmm...aber wozu ist dann die *.dll gut, wenn nur die *.lib in den Linkereinstellungen eingebunden wird? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 12.07.2004, 11:59 Titel: |
|
|
In der .lib stehen nich die Funktionen ansich, sondern nur deren Prototypen oder so...
Weißes aber auch nich genau... |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 12.07.2004, 12:41 Titel: |
|
|
Ich glaube die lib ist praktische eine dll in einer exe.
Das hat den nachteil das man z.B. nicht die Engine updaten kann ohne das Spiel upzudaten. Außerdem muss man glaub ich eine dll speziell laden. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
Zyrian Super JLI'ler
Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
|
Nach oben |
|
|
Chewie Super JLI'ler
Anmeldedatum: 17.07.2003 Beiträge: 382
Medaillen: Keine
|
Verfasst am: 12.07.2004, 14:16 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: | Chewie hat Folgendes geschrieben: | wenn du das mal kompilierst, bekommst du eine .lib und .dll datei. |
Hmm...aber wozu ist dann die *.dll gut, wenn nur die *.lib in den Linkereinstellungen eingebunden wird? |
beim entwickeln musst du die lib linken, das fertige spiel kommt dann aber mit der .dll aus. kann dir aber auch nicht genau sagen, was wo drinsteht, man braucht jedenfalls beide...is wie bei DX.
@Peacekiller
eine dll in einer exe wäre eine static library, keine dll(dynamic link library). |
|
Nach oben |
|
|
MATTT Junior JLI'ler
Anmeldedatum: 18.06.2003 Beiträge: 59
Medaillen: Keine
|
Verfasst am: 12.07.2004, 14:58 Titel: |
|
|
Noch eine Ergänzung:
Eine Static Library ist eine .lib. Ansich brauchst du, wenn du eine die DLL erstellt hast, keine .lib. Du kannst die Funktionen mit bestimmten Windows-Funktion exportieren (dann kriegst du glaube ich einen Zeiger auf eine Funktion zurück). Dies ist aber viel Arbeit, die durch die .lib erspart wird. |
|
Nach oben |
|
|
|