JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

DLL...???

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ZeroCool
Mini JLI'ler



Anmeldedatum: 26.01.2005
Beiträge: 15

Medaillen: Keine

BeitragVerfasst am: 18.10.2005, 14:06    Titel: DLL...??? Antworten mit Zitat

Hallo,

hab folgendes Problem:
Ich will eine dll schreiben. gesagt getan.
aber wie kann man die Funktionen aus der dll nutzen???
muss man die noch irgendwie in der veröffentlich, oder wie geht das???

Gruss

Sergius
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 18.10.2005, 14:16    Titel: Antworten mit Zitat

Autsch.

http://pluto.homelinux.org/vorlesungen/systemschnittstellen/script/win/dll.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 18.10.2005, 15:14    Titel: Antworten mit Zitat

Du musst dir deine DLL-Funktionen veröffentlichen. Wenn du in deiner DLL keine kompletten Klassen veröffentlichen willst, geht das recht einfach: Der header deiner Funktion muss mit
CPP:
__declspec(dllexport)
markeirt werden. Der Linker bastelt dann aus dieser Information eine DLL und eine LIB-Datei. Die DLL ist für den Programmaufruf wichtig, die LIB für den Linker des Programms, das die DLL verwendn will. Diese LIB muss also in die Projekteinstellungen des Anwendungsprogrammes mit aufgenommen werden.
Des weiteren muss der Prototyp der Funktion, die du aus der DLL importieren willst dem Anwendungsprogramm bekannt sein. Es handelt sich dabei um den gleichen Funktionsprototyp, der auch im Header der DLL zu finden ist - diesmal nur mit der Markierung
CPP:
__declspec(dllimport)
Am Besten ist es also, den Header der DLL so einzubinden, dass er, wenn er von der DLL kompiliert wird ein dllexport vor die funktion schreibt und wenn er vom Anwendungsprogramm eingebunden wird ein dllimport...
Dazu macht man einfach ein Makro, welches eine Definition nutzt, die nur in während der DLL-Kompilation existiert.
Das Visual Studio erstellt eine solche Präprozessordefinition, wenn ein neues DLL-Projekt angelegt wird, welche den Namen XYZ_EXPORTS trägt (Wenn deine DLL XYZ.dll ist).
nun erstellt man das Makro
CPP:
#idfef XYZ_EXPORTS
#define XYZ_API __declspec(dllexport)
#else
#define XYZ_API __declspec(dllimport)
#endif
im Header der DLL und nutzt dann XYZ_API für jede zu exportierende FUnktion.
Das Anwendungsprogramm (dass während des Kompiliertvorgangs das Makro XYZ_EXPORTS nicht kennt) weiss dann, dass die Funktionen aus diesem Header importiert werden müssen.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ZeroCool
Mini JLI'ler



Anmeldedatum: 26.01.2005
Beiträge: 15

Medaillen: Keine

BeitragVerfasst am: 18.10.2005, 15:22    Titel: Antworten mit Zitat

ok super danke.

Habe aber immer noch ein Problem.
Es klappt zwar alles aber wenn ich nun einen string in dem funktions auruf oder als rückgabe wert habe, macht er es nicht.WIESO??

beispiel: main.h
CPP:
#ifndef MAIN_H
#define MAIN_H

#include <windows.h>
#include <string>

#define _DLL __declspec( dllexport )

#ifdef _DLL
  #define DLL_EXPORT __declspec( dllexport )
#else
  #define DLL_EXPORT __declspec( dllimport )
#endif

extern DLL_EXPORT char* sFunktion();

      DLL_EXPORT int iFunktion();

       DLL_EXPORT void pFunktion(string* ptr);
 
      DLL_EXPORT string spFunktion(string* ptr, int* zahl);

#endif


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


 DLL_EXPORT char* sFunktion()
 {   
    char b;
    b = 's';
    char* a;
    a = &b;

   return a;
 }

DLL_EXPORT int iFunktion()
 {
 return 18102005;
 }

 DLL_EXPORT void  pFunktion(string* ptr)
 {
   string a = "Pointer übergabe geht";
   ptr = &a;
 }

 DLL_EXPORT string spFunktion(string* ptr, int* zahl)
 {
    int a = 18102005;
    string t = "Wenn hier das selbe steht wie in der Rückgabe dann stimmt es 18102005";
    zahl = &a;
    ptr = &t;
    return "Wenn hier das selbe steht wie in der Rückgabe dann stimmt es 18102005";
 }
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 18.10.2005, 15:32    Titel: Antworten mit Zitat

die Definition in deinem Header ist vollkommener Quatsch. So wird die Funktion immer exportiert...
Wenn dein DLL-Projekt TestDll heisst, dann schreibe in deinem Header folgendes:
CPP:
#praga once

#ifdef TESTDLL_EXPORTS
#define TESTDLL_API __declspec(dllexport)
#else
#define TESTDLL_API __declspec(dllimport)
#endif

TESTDLL_API int MeineFunktion(int Foo);

In der CPP-Datei steht dann noch folgendes:
CPP:
#include "testdll.h"

int MeineFunktion(int Foo)
{
  return Foo+7;
}


Damit sollte alles klappen
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 18.10.2005, 15:32    Titel: Antworten mit Zitat

Der String t wird ja nach der Funktion spFunktion wieder aus dem Speicher gelöscht. Also wird der Zeiger ptr ungültig.
_________________
»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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ZeroCool
Mini JLI'ler



Anmeldedatum: 26.01.2005
Beiträge: 15

Medaillen: Keine

BeitragVerfasst am: 19.10.2005, 09:19    Titel: Antworten mit Zitat

hat sich erledigt!!!
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 -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
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