JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=9b452fd98c8e2237330128b7f9ef0814Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

ich brauch ne dll
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 25.11.2007, 09:32    Titel: ich brauch ne dll Antworten mit Zitat

hallo,
ich suche jetzt schon MONATELANG nach gescheiten Tutorials wie man dlls in (v-)c++ schreibt. Es gibt auch einige, die ich allerdings nie verstehe.
Kann mir einer vielleicht den Quellcode einer dll mit einer Funktion hier posten und dazu dann den quellcode der sie dynamisch einbindet? Ich will nicht das ihr mir ein riesiges programm schreibt, ne funktion zum addieren von zwei zahlen reicht ja schon. Bitte, ich verzweifle!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Otscho
Super JLI'ler


Alter: 35
Anmeldedatum: 31.08.2006
Beiträge: 338
Wohnort: Gummibären-Gasse
Medaillen: Keine

BeitragVerfasst am: 25.11.2007, 10:18    Titel: Antworten mit Zitat

Manchmal hilft auch der hauseigene Hilfesupport. Falls du Microsoft VC++ verwendest dann schai einfach in der Hilfe unter:
Vorgehensweise in Visual C++ Express -> Erste Schritte -> Exemplarische Vorgehensweise: Erstellen und Verwenden einer DLL (Dynamic Link Library)
oder gleich ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.de/dv_vcmcpp/html/3ae94848-44e7-4955-bbad-7d40f493e941.htm in die Adress Zeile eingeben.

Oder das Selbe für den Browser:
http://msdn2.microsoft.com/de-de/library/ms235636(VS.80).aspx

Wie mit anderen IDEs geht weiß ich net.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 25.11.2007, 13:26    Titel: Antworten mit Zitat

http://www.spieleprogrammierer.de/phpBB2/viewforum.php?f=27&sid=8b6fafef2cb064de39e7a984c2e5c1ba


...
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 25.11.2007, 18:39    Titel: Antworten mit Zitat

die beschreibung auf der microsoftseite habe ich schon mal gefunden, fand ich aber komisch, weils bei mir nicht funktioniert hat. Das Tutorial auf der spieleprogrammiererseite sieht gut aus, guck ich mir auf jeden Fall an. Danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 19.06.2008, 13:42    Titel: Antworten mit Zitat

ist schon ein bischen älter der thread, ich habs aber immernoch nicht geschaft vernünfige dlls zu benutzen.

Ich hab eine Dll erstellt deren code so aussieht:

test.h:
CPP:
#include <windows.h>

#ifdef BUILD_DLL
    #define DLL_PORT __declspec(dllexport)
#else
    #define DLL_PORT __declspec (dllimport)
#endif


extern "C" class DLL_PORT Klasse
{
    public:

    int add(int a, int b);
};


Klasse DLL_PORT GetInstance();


main.cpp:
CPP:
#include "test.h"

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    return true;
}

int Klasse::add(int a, int b)
{
    return a+b;
}

Klasse tmp;

Klasse GetInstance()
{
    return tmp;
}



jetzt wollte ich die instanz der klasse in meinen testprogramm bekommen:

main.cpp:

CPP:
#include <iostream>
#include <windows.h>
#include "test.h"

int main()
{
    HINSTANCE DllInst = LoadLibrary("sample.dll");
    typedef Klasse (*DLLFUNC)(void);
    DLLFUNC funktion = (DLLFUNC)GetProcAddress(DllInst, "GetInstance");

    Klasse test = funktion();
    system("pause");
    return 0;
}


bekomme aber einen laufzeitfehler Wink habt ihr ne idee? ich vermute mal mein kompletter code ist totaler müll, aber im internet hab ich nicht wirklich viel dazu gefunden, wie man ganze klassen aus ner dll verwendet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Deviloper
Junior JLI'ler



Anmeldedatum: 31.05.2006
Beiträge: 77

Medaillen: Keine

BeitragVerfasst am: 19.06.2008, 17:07    Titel: Antworten mit Zitat

Ja er ist Müll!

sample_dll.hpp
CPP:
#if !defined (SAMPLE_DLL_HPP__INCLUDED)
#define SAMPLE_DLL_HPP__INCLUDED

#include <windows.h>
#include <iostream>

#ifdef SAMPLE_DLL
    #define SAMPLE_API __declspec(dllexport)
#else
    #define SAMPLE_API __declspec (dllimport)
#endif

#include "show.hpp"

#endif // SAMPLE_DLL_HPP__INCLUDED


sample_dll.cpp
CPP:
#include "sample_dll.hpp"

BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID)
{ return TRUE; }


show.hpp
CPP:
#if !defined (SHOW_HPP__INCLUDED)
#define SHOW_HPP__INCLUDED

namespace sample_dll
{
    struct SAMPLE_API Show
    {
        void addition(const unsigned int, const unsigned int);
    };
}; // sample_dll

#endif // SHOW_HPP__INCLUDED


show.cpp
CPP:
#include "sample_dll.hpp"

namespace sample_dll
{
    void Show::addition(const unsigned int first, const unsigned int second)
    { std::cout << first + second; }
}; // sample_dll
...
so da haste das schon mal ...

Dann musse dem Compiler beim builden der DLL sagen, das SAMPLE_DLL definiert werden soll.

Dann die Anwendung, die die DLL nutzt:
CPP:
#pragma comment(lib, "sample_dll.lib")

#include "sample_dll.hpp"

int main()
{
    sample_dll::Show instance;
    instance.addition(10, 5);
}
... und schon fertig Razz Sollte dir dann 15 ausgeben Wink

Zuletzt bearbeitet von Deviloper am 19.06.2008, 17:35, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 19.06.2008, 17:20    Titel: Antworten mit Zitat

ähm, ich bekomme den linker fehler 2019:

Code:
main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall sample_dll::Show::addition(unsigned int,unsigned int)" (__imp_?addition@Show@sample_dll@@QAEXII@Z) referenced in function _main



läd der code die dll dynamisch? ich glaube nicht oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Deviloper
Junior JLI'ler



Anmeldedatum: 31.05.2006
Beiträge: 77

Medaillen: Keine

BeitragVerfasst am: 19.06.2008, 17:35    Titel: Antworten mit Zitat

Jetzt schon Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 19.06.2008, 18:32    Titel: Antworten mit Zitat

jetzt links du die lib statisch, ich versuche aber die dynamisch mit loadlibrary() und freelibrary() zu laden
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bravo20
Mini JLI'ler



Anmeldedatum: 16.06.2008
Beiträge: 5

Medaillen: Keine

BeitragVerfasst am: 19.06.2008, 18:42    Titel: Antworten mit Zitat

und was soll das bringen, wenn du dein programm kompiliert hast, wird er die dll auch dynamisch laden, das heist ohne die dll wird nichts laufen
oder hab ich da was nicht richtig mitbekommen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 19.06.2008, 19:59    Titel: Antworten mit Zitat

Bravo20 hat Folgendes geschrieben:
und was soll das bringen, wenn du dein programm kompiliert hast, wird er die dll auch dynamisch laden, das heist ohne die dll wird nichts laufen
oder hab ich da was nicht richtig mitbekommen


Hast du. Denn man kann auch einfach während das Programm läuft im Code gucken, ob es ne bestimtme dll gibt, und die versuchen zu laden und dann die entsprechenden Sachen da raus hohlen. Ist halt für Plugins interessant.

Allerdings könnte es u. U. eine Überlegung wert sein, ob man statt einer dll nicht eine Skriptsprache seiner Wahl nehmen sollte. Die sind teilweise nicht viel langsamer, aber man kann Skripte schreiben ohne gleich eine dll kompilieren zu müssen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 20.06.2008, 13:14    Titel: Antworten mit Zitat

ich möchte ein plugin-system schreiben. Ich weiß nicht ob das so sinnvoll ist directx als script zu benutzen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 24.06.2008, 05:51    Titel: Antworten mit Zitat

Zitat:
Ich weiß nicht ob das so sinnvoll ist directx als script zu benutze


Du weisst es wirklich nicht mhh? Überlege inwiefern es Sinn macht DirectX als "Scriptsprache" zu verwenden.

Auch würde es mich interessieren wie du überhaupt auf diese Idee kommst.

Das mit dem dynamisch laden hättest du auch früher erwähnen können. Sobald du dich ein wenig in DLLs eingelesen hast wirst du sicher von selbst drauf kommen wie das funktioniert und ich hoffe doch sehr das hier keiner dir alles vorkauen wird Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 24.06.2008, 11:59    Titel: Antworten mit Zitat

Ich glaube er mein "aus einem Skript heraus DX benutyen"

Ich sehe das so: Das Spiel an sich sollte das Grundgerüst sein, der ganze lowlevel Kram würde also in dem Hauptprogramm sein. Ein Skipt mag meinetwegen ein neues Objekt erstellen und steuern aber verwaltet und gerendert wird es von dem Spiel.
Z.b. würde in einem Spiel ein Skript die KI von einem Gegner steuern aber das ganze rechenintensive lowlevel zeug übernimmt das Spiel.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
newby
JLI'ler



Anmeldedatum: 17.08.2007
Beiträge: 106

Medaillen: Keine

BeitragVerfasst am: 24.06.2008, 12:19    Titel: Antworten mit Zitat

Ich habe einen Plattform geschrieben, der man ganze Spiele hinzufügen kann. (so ähnlich wie Steam, nur deutlich primitiver^^).

Jetzt wollte ich das ganze DirectX-LowLevel-zeug in ne dll packen, damit die spiele, die man auch als dll hinzufügt darauf zugreifen können.

Frage: kann ich mit zwei applikationen (bzw dlls) das gleiche Direct3dDevice benutzen?


Nach Gefühl habe ich alle deutschen und englischen tutorials zum Thema dlls durch, die erklären aber irgendwie nie wie das mit Instanzen von Klassen funktioniert.




PS: Ich dachte das wäre klar, dass eine dymamic link library, die ich selber schreibe, auch dynamisch geladen werden soll, sonst könnte ich ne .lib oder .h datei schreiben Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum