1

Freitag, 8. Februar 2008, 15:40

Crashkurs DLLs

Hallo und herzlich willkommen :)
Heute wollen wir einen Ansatz zur Lösung folgenden Problems finden:
Scripten in RGSS ist zwar bequem und relativ einfach, doch da RGSS/Ruby eine interpretierte Sprache ist kommt sie leider nicht an die Performance einer niedrigeren Sprache wie C ran. Doch RGSS bietet uns zwei Funktionen um dieses Problem zu lösen!

Im Laufe des Tutorials werden wir eine sehr einfache DLL (dynamic link library) in C programmieren und ihre Funktion(en) in RGSS nutzen.

Spoiler: Vorraussetzungen

- RPG Maker XP (!) oder VX : )

- ein C(++) Compiler, wie zum Beispiel...
-> ...GCC, für Windows in der MinGW-Variante (!)
-> ...Microsoft Visual C++ / Microsoft Visual Studio
-> ...Borland C Compiler

- im Falle des MinGW-Compilers zusätzlich eine IDE, wie zum Beispiel...
-> ...Code::Blocks (!)
-> ...Devcpp
-> ...Eclipse mit C-Builder Plug-In

Auf das Setup möchte ich eigentlich nicht eingehen...

(!) = Diese Werkzeuge benutze ich im Tutorial, alles andre stellt Alternativen dar
zum Lesen den Text mit der Maus markieren


Wir starten in der IDE unseres Vertrauens ein neues DLL-Projekt und fügen folgenden Code ein, welchen ich zeilenweise erläutern werde.
Spoiler: C-Source

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
#include<windows.h>
extern "C" __declspec(dllexport) int AddNumbers(int z1, int z2);
 
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
 
int AddNumbers(int z1, int z2)
{
    return z1 + z2;
}
zum Lesen den Text mit der Maus markieren


Quellcode

1
#include<windows.h>
#include bindet in C eine Quelltextdatei ein, das Synonym in Ruby dazu wäre "require".
Wir binden die Headerdatei "windows.h" ein, denn wir brauchen sie um WINAPI-Objekte zu erstellen (in unserem Fall der Einsprungspunkt der DLL).

Quellcode

1
extern "C" __declspec(dllexport) int AddNumbers(int z1, int z2);
Dies macht unsere DLL zu einer DLL - mit "extern" stellen wir Funktionen der DLL andren Programmen zur Verfügung. __declspec(dllexport) impliziert nochmals dass es sich um eine DLL handelt (andre Programmformen können ebenfalls exportieren), "int" ist der Rückgabewert unserer Funktion, "AddNumbers" der Name, und in Klammern stehen die Argumente mit Typ.

Quellcode

1
2
3
4
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
Dies ist der Einsprungspunkt unserer DLL. Er ist formell nötig, aber die Erklärung der einzelnen Argumente steuert wenig zum Tutorial bei.

Quellcode

1
2
3
4
int AddNumbers(int z1, int z2)
{
    return z1 + z2;
}
Der "interessante" Teil unserer DLL. Dies ist die Funktion die wir oben ja bereits zum Export fertig gemacht haben. Sie ist vom Typ integer, erwartet zwei Integer-Argumente, addiert diese, und gibt das Ergebnis zurück. Die Deklaration unterscheidet sich hauptsächlich von einer Ruby-Deklaration weil C etwas "ernster" ist und immer wissen will von welchem Typ Variablen und Funktionen sind.

Und das ist sie bereits, unsere DLL. Wir können sie nun kompilieren, meine habe ich "ExampleDLL.dll" genannt.

Dies war der "komplexe" Teil in C, nun öffnen wir den Maker und machen uns daran die eben erstelle Funktion zu benutzen. Zuerst erstellen wir ein neues Script über "Main".
Um das Ganze stylistisch einwandfrei zu machen erstellen wir uns auch eine neue Klasse (ExampleDLL) und eine Methode die wir benutzen werden, "addieren". Dieser machen wir von Anfang an klar dass sie zwei Zahlen als Argumente bekommt.

Ruby Quellcode

1
2
class ExampleDLL
  def addieren(zahl1, zahl2)


Zum Aufruf externer Programme - und dazu zählen wir auch unsere ExampleDLL.dll - stellt uns Ruby die Methode "Win32API.new" zur Verfügung.

Ruby Quellcode

1
Win32API.new("DLL", "Funktion", [Array In], "Out")
Die ersten beiden Parameter stellen Name unserer DLL und Name der Funktion dar, Array In gibt an welche Argumente die C-Funktion entgegennimmt (i = Integer, p = Pointer, V = Void), Out ist der Typ des Rückgabewertes. Angewendet bedeutet das für uns:

Ruby Quellcode

1
addNumbers = Win32API.new("exampleDLL.dll", "AddNumbers", ['i', 'i'], 'i')
(Wir speicher den Api-Call direkt in der Variable "addNumbers")

Nun müssen wir die Funktion noch "callen", also ausführen. Dafür nutzen wir (ApiObject).call("arg1", [argN]...), in unsrem Falle:

Ruby Quellcode

1
ergebnis = addNumbers.call(zahl1, zahl2)
Wichtig: Wir speichern den Aufruf in der Variable "ergebnis", außerdem lassen wir zahl1 und zahl2 später noch ersetzen ;)

Danach folgt nur noch das obligatorische Ausgeben des Ergebnisses und zwei "end"s von Klasse und Methode:

Ruby Quellcode

1
2
3
    print ergebnis
  end
end


Das Meiste haben wir bereits hinter uns, fehlt eigentlich nur noch ein NPC der jetzt die Drecksarbeit für uns macht ;) Also schnell ein Event erstellt mit Script-Command:

Ruby Quellcode

1
2
addition = ExampleDLL.new
addition.addieren(1,3)

Und - unglaublich aber wahr - das Ergebnis ist 4 :)

Ich hoffe dieser Crashkurs hat zumindest die Grundlagen klar gemacht und ihr könnt etwas davon auch praktisch verwenden :) Feedback willkommen...

-MfG, GreyHat
»GreyHat« hat folgende Dateien angehängt:
  • dll.rar (2,27 kB - 29 mal heruntergeladen - zuletzt: 31. August 2011, 22:31)
  • bspProjekt.rar (179,93 kB - 29 mal heruntergeladen - zuletzt: 9. Juni 2011, 11:50)
Bild

2

Freitag, 8. Februar 2008, 16:09

1a Tutorial. :freunde:

Hab ich mal wieder was dazu gelernt. Ich finds gut verständlich erklärt und auch nicht zu knapp beschrieben.
Jetzt muss ich nur noch diesen C Compiler dazu bringen, mir ne DLL auszuspucken :D (Achtung, C Noob ^^)

3

Freitag, 8. Februar 2008, 17:11

Bild

Was soll man da noch groß sagen, wunderbares Tutorial. (Wobei ich machnal nicht verstanden habe worums ging ;) )

"Array In gibt an welche Argumente die C-Funktion entgegennimmt (i = Integer, p = Pointer, V = Void),"
Kann ma da auch Strings übergeben und was sind pointer? Void ist ja klar ist nix (gibts auch in java)
( Das sagt wikipedia dazu -> http://de.wikipedia.org/wiki/English_Pointer )

Gruß Sven
:information: YAams
:rainbow: Random Signatur
Bild





Weitere Informationen | Download
Mit Support für RGSS Project 1!
Bild

4

Freitag, 8. Februar 2008, 17:30

Strings sollten eigentlich auch mit 'p' gehen... Pointer sind was ähnliches wie Referenzen :P (Weiß garnicht ob's die in Ruby gibt...) Sozusagen ein Verweis auf den Wert einer Variable... (Wikipedia). Aber wie gesagt sollte p auch Strings übertragen...

Zitat

Wobei ich machnal nicht verstanden habe worums ging )
Sag' mal wo das genau war, bin noch kein Tutorial-Profi und verbessere da gerne noch was...

-MfG, GreyHat :hi:
Bild

5

Freitag, 8. Februar 2008, 17:44

Jup, mit 'p' gehen Strings ;)

Nebenbei sehr gutes Tutorial, wenn auch für absolute C-Anfänger eventuell nicht so leicht zu verstehen. Und man sollte eventuell noch erwähnen, dass es eigentlich eine bessere Möglichkeit gibt, Dlls zu benutzen, als über die (langsamen) WinAPI, das jedoch im Maker nicht geht... aber sonst... großes Lob!

Drag-On

6

Freitag, 4. Juli 2008, 15:54

hmmm.... gar nicht gewusst das ich so einfach dem rmxp mit .dlls füttern kann

nur hab ich ein problem: wie erstell ich die .dlls?
habe 1 jahr C gelernt, aber noch nie eine .dll erstellt und weiß daher nicht wie ich das angehen soll
verwende Bloodshead Dev-C++, das testbeispiel lässt sich mit folgenden meldungen compilieren
[Linker error] undefined reference to `WinMain@16'
ld returned 1 exit status
und ja... ich habe keine ahnung wie ich jetzt die .dll erstelle :hilfe:

kann mir da irgendjemand helfen?
aber ansonsten: gutes tut^^

EDIT: ok, hat sich erledigt

7

Samstag, 5. Juli 2008, 21:43

nun ich würde mal das windows SDK einbinden zu A

Zu b würde ich dann mal ein gescheites C++ programm nutzen. Gott behüte das ich das jetzt sage nimm Visual C++ Studio von Windows das reciht für deine belange alle mal.

Da kannst du dann auch beim erstellen von projekten Dynamic Libaries auswählen.
Spoiler: Signatur
  • Ashram

    Vorname, Nachname: Ashram Vagnaghul
    "der schwarze Schrecken"

    Geschlecht: Männlich ♂
    Rasse: Mensch
    Alter: zirka 28 Jahre alt
    Aussehen:
    Ashram ist ein Hühne von Mann und überragt mit seinen knappen 2,10 Metern die meisten anderen Bewohner des Landes. Sein langes, schwarzes Haar und seine stechenden, dunklen Augen, verleihen ihm eine Angst verbreitende Aura. Seine Stimme ist dunkel und kraftvoll, sein Körper vom täglichen Training gestählt.

    Charakter:
    Ashram gehört zu den kalten Menschen. Er ist wenig kommunikativ und hält den Umgang mit anderen Lebewesen für Zeitverschwendung. Er verfolgt seine Ziele ohne Rücksicht auf Verluste und hinterlässt dabei oft eine Schneise der Verwüstung. Während seiner Einsätze für den Hauptmann des Brecherordens kam es immer wieder unglücklichen Todesfällen unter den Begleitern, die Ashram an die Seite gestellt wurden, um ihn zu unterstützen.
    Dennoch steht er ohne Frage loyal zum Orden und der Menschheit.

    Herkunftsort:
    Unbekannt.
    Wurde vom Hauptmann der Brecher aufgenommen und ausgebildet, nachdem dieser ihn am Strand gefunden hatte. Alles was er bei sich trug war seine Rüstung, sein Schwert und ein Medallion.

    Beruf:
    Söldner, der zumeist die politisch heiklen Aufgaben für die Brecher übernimmt

    Fähigkeiten:
    Aktiv
    Passiv
    128 Sünden:
    Greift den Gegner mit einer schneller Abfolge von Schlägen an und verletzt dabei 128 Vitalpunkte seines Gegners, was ihn außer Gefecht setzt. In dieser Zeit kann sich Ashram nicht verteidigen und da es etwas dauert, alle Punkte zu treffen, bedeutet ein vorzeitiges Unterbrechen, dass die Wirkung nicht entsprechend ist. Jedes Benutzen diese Fähigkeit hat zur Folge, dass Ashram sich einige Zeit lang nicht bewegen kann, weil er sich erholen muss.

    Darkness:
    Aktiviert die besondere Fähigkeit seines Schwertes und hüllt den Gegner in Schatten ein, die ihn seine Orientierung verlieren lassen und ihm langsam die Lebensgeister rauben.
    Erfordert im Moment ein Hohes Maß an Vorbereitung für Ashram, so dass er diese Fähigkeit im Kampf noch nicht 100%ig beherrschen kann.

    Aufruf:(Kurugane)
    Ruft Kurugane aus ihrer Rune, die durch den Blutpakt an Ashram gebunden ist, um ihn durch ein schwarzes Portal an einen anderen Ort auf Ardarn zu bringen.

    Bild
    Magiekenntnis

    Bild
    Waffenerfahrung
    Beherrscht die sowohl Einhand- als auch Zweihandwaffen und entlockt ihnen ihr volles Potential.

    Bild
    Begleiter
    Die Dämonin Kurugane begleitet Ashram und verlangt für ihre Dienste jedes mal einiges vom Lebenssaft Ashrams.



    Hintergrundgeschichte:
    Vor nun mehr 48 Vollmonden, in jener Nacht des großen Unwetters, sah man an der Küste des Westmeeres ein kleines Boot, wie es gepeitscht von Wellen, Sturm und Regen, gegen die scharfen Felsen der Küste geschmettert wurde. Am nächsten Tag begab es sich, dass eine Patrouille der Brecher, unter ihrem damaligen Hauptmann, die Küste entlangzog, auf der Sucher nach einem Magier.
    Sie fanden zwar nicht den Magier, den sie suchten, doch dafür die Trümmer eines Bootes und in ihnen einen jungen Mann, gekleidet in einer ihnen fremden Rüstung und bewaffnet mit einem gewaltigen Schwert. Der Mann war bewusstlos und der Hauptmann entschied sich, ihn mit in das Hauptquartier des Brecherordens zu nehmen um ihn dort zu befragen.
    Wie sich später herausstellte, besaß der Jüngling jedoch nur noch sehr bruchstückhafte Erinnerungen und so blieb seine Herkunft und der Grund für seine Anwesenheit hier ein Rätsel. Man beschloss, ihn unter Beobachtung zu halten.
    Während eines Trainingsduells der Ritter des Brecher-Ordens, begab es sich, dass Ashram - so hatte man ihn genannt, denn dies war der Name auf dem Siegelring, den er trug - herausgefordert wurde, zumal sich Gerüchte wegen seines plötzlichen Auftauchens und seiner ungewöhnlichen Rüstung breit machten. In dieses Duell, dem der Hauptmann beiwohnte, zeigte sich, dass Ashram sehr wohl in der Lage war, seine schwere Waffe, die mit ihm an Land gespült worden war, zu beherrschen.
    Leider mangelte es ihm an Teamgeist und Zugehörigkeitsgefühl. Niemand wollte etwas mit dem Fremden, der sich so verschlossen zeigte, zu tun haben und trotz der Bemühungen des Hauptmanns, der Ashrams Potential erkannte, wurde seine Aufnahme in den Heiligen Orden der Brecher nicht zugestimmt. Jedoch räumte man ihm eine andere Möglichkeit ein: von Zeit zu Zeit kam es vor, dass man Magier an Orten jagen und ausschalten musste, an denen die Brecher nicht offen, ohne politische Konsequenzen zu fürchten, operieren konnten. Dafür heuerte man dann Söldner an, die niemand zuordnen konnte oder niemand vermissen würde.
    Ashram willigte ein und wurde wie man es nannte "Freier Ritter". Doch seine Taten sollten ihm bald unter den Magiern den Namen "schwarzer Schrecken" verleihen. Auch unter den Söldnern, die öfters Aufgaben der Brecher an nahmen, wagte es niemand mehr mit ihm auf Reisen zu gehen, oder Aufgaben zu erfüllen. Es kam immer wieder zu mysteriösen Todesfällen unter seinen Begleitern und man sagte ihm nach, er habe sie getötet, weil sie ihn bei der Jagd auf seine Beute behinderten.
    Von einem seiner Aufträge brachte er nicht nur den Kopf eines Magiers mit, er weigerte sich seinen Lohn anzunehmen und stattdessen wollte er die Rune behalten, die er bei dem Magier gefunden hatte. Im Normalfalle wäre dies nicht möglich gewesen, denn alle Habseligkeiten einen Magiers werden konfisziert oder vernichtet, jedoch maß man einem wertlosen Stück Stein - kein Magiekundiger konnte die Rune zuweisen- keine größere Bedeutung zu.
    Ashram jedoch erkannte, dass die Schriftzeichen seines Schwertes und die der Rune, die gleichen waren; sie waren fremd und doch vertraut.
    In jener Mondlosen Nacht, auf einem Hügel in der Nähe des Roten Turms, rief Ashram die Dämonin darin zum ersten Mal und besiegelte den Pakt des Blutes mit ihr, in der Hoffnung, eines Tages herauszufinden, wo er her kam, warum er die Runen und ihre Macht verstand und was ihn auf diesen von Gott verlassenen Kontinent getrieben hatte.



    -Start-


    Startort: Hauptquartier der Brecher
    Startpost:

    Rüstung: Schwere Plattenrüstung, mit Schwertbrechern an Schulter und Hals. Dazu Plattenstiefel und Handschuhe. Schwarzer Umhang, mit von Innen mit roten Samt ausgekleidet. Trägt die Scheide für sein Zweihandschwert links am Gürtel. Kuruganes Rune ist an einer untrennbaren Kette um seinen Hals gebunden, die sich erst löst, wenn der Pakt der beiden beendet ist

    Inventar:
    Rucksack (6)
    • 2 x Proviant
    • Verbandsmaterial
    • Zunderzeug
    • Messer

    Geld: 30 Kupfer
  • Zitate

    [ spoiler ](01:12:02) Nariakei: ich schreib nich gross x.x

    (01:12:09) Nariakei: du weisst ja, ich mags klein :<



    (01:14:09) Nariakei: v.v hallu mein name is cedric, ich bin 17 jahre alt und stehe auf kleine mädels :< lool

    (01:14:13) Fail: muss er dich wohl bannen, sonst gibt es nur streit :<

    (01:14:37) Nariakei: wtf v.v

    (01:14:46) Nariakei: ich sag do nich einfa wi ich heiss oda wi alt ich bin
    [ /spoiler ]

    [ spoiler ]Epics Geilste Sprüche:



    (00:00:07) epic: hrrr

    (00:00:14) epic reibt sich die nippel



    (03:04:59) epic: (03:02:51) epic: ich bin absolut grundlos gluecklich

    (03:02:55) epic: weil ist halt so

    (03:03:11) epic: und reden kann ich ab nu nicht mehr

    (03:03:20) epic: weil meine mum hat mir grade den stinkefinger gezeigt[ /spoiler ]

    [ spoiler ]
    Sprach Talente
    (22:37:46) (Leonheart): Kenshi fast jeder hat hier schon mit dem rmxp gearbeitet einige arbeiten jetzt ohne maker sondern scripten selber
    (22:37:49) agenty: meine klassik-gitarre is n billig-teil XD
    (22:38:03) Kenshi_Player: cool ich auch!!
    ((22:38:39) (Leonheart): welche sprache nutzt du kenshi
    ((22:38:53) Kenshi_Player: wie meinßt du des??
    (22:39:08) (Leonheart): zum programmieren du sagtest du scriptest auch
    (22:39:24) Kenshi_Player: ja ich benutze Englisch!![ /spoiler ]
zum Lesen den Text mit der Maus markieren

8

Sonntag, 6. Juli 2008, 17:59

Also Dev-C++ ist eine absolut "gescheite" IDE (außer, dass sie nicht unter Linux läuft). Ich hab da selber schon DLLs mit gemacht. Das geht problemslos. Ich werd gleich mal kurz kuken wie und ne Anleitung schreiben...

EDIT:
Also:
Alt + P um die Projekt Optionen aufzurufen
unten rechts Typ auf "Win32 DLL" stellen
dann läuft das Beispiel.
Für weitere Funktionen(Netzwerkunterstützung usw...) muss man vielleicht noch Bibliotheken einbinden. Wenn du das brauchst sag bescheid...

9

Samstag, 27. Juni 2009, 21:00

-> ...Borland C Compiler
Wie du heute bei mir gesehen hast, klappt es mit Borland leider nicht =D

Wenn jemand ein Codebeispiel hat, mit dem man über Borland C++ ne DLL erstellen kann, aus der man die Funktion in Ruby auch aufrufen kann, nur her damit!
Ansonsten benutze ich Code::Blocks...

10

Dienstag, 30. Juni 2009, 02:18

Tja HK das schreit mal wieder nach einer Durchzechten NAcht im TS da erkläre ich dir das ... mal wieder ^^ anhand von Codebeispielen.

Du hast ja aus unseren anderen Projekten ne menge gemacht auch wenn ich mittlerweile nicht mehr in den Credits genannt werde XD
Spoiler: Signatur
  • Ashram

    Vorname, Nachname: Ashram Vagnaghul
    "der schwarze Schrecken"

    Geschlecht: Männlich ♂
    Rasse: Mensch
    Alter: zirka 28 Jahre alt
    Aussehen:
    Ashram ist ein Hühne von Mann und überragt mit seinen knappen 2,10 Metern die meisten anderen Bewohner des Landes. Sein langes, schwarzes Haar und seine stechenden, dunklen Augen, verleihen ihm eine Angst verbreitende Aura. Seine Stimme ist dunkel und kraftvoll, sein Körper vom täglichen Training gestählt.

    Charakter:
    Ashram gehört zu den kalten Menschen. Er ist wenig kommunikativ und hält den Umgang mit anderen Lebewesen für Zeitverschwendung. Er verfolgt seine Ziele ohne Rücksicht auf Verluste und hinterlässt dabei oft eine Schneise der Verwüstung. Während seiner Einsätze für den Hauptmann des Brecherordens kam es immer wieder unglücklichen Todesfällen unter den Begleitern, die Ashram an die Seite gestellt wurden, um ihn zu unterstützen.
    Dennoch steht er ohne Frage loyal zum Orden und der Menschheit.

    Herkunftsort:
    Unbekannt.
    Wurde vom Hauptmann der Brecher aufgenommen und ausgebildet, nachdem dieser ihn am Strand gefunden hatte. Alles was er bei sich trug war seine Rüstung, sein Schwert und ein Medallion.

    Beruf:
    Söldner, der zumeist die politisch heiklen Aufgaben für die Brecher übernimmt

    Fähigkeiten:
    Aktiv
    Passiv
    128 Sünden:
    Greift den Gegner mit einer schneller Abfolge von Schlägen an und verletzt dabei 128 Vitalpunkte seines Gegners, was ihn außer Gefecht setzt. In dieser Zeit kann sich Ashram nicht verteidigen und da es etwas dauert, alle Punkte zu treffen, bedeutet ein vorzeitiges Unterbrechen, dass die Wirkung nicht entsprechend ist. Jedes Benutzen diese Fähigkeit hat zur Folge, dass Ashram sich einige Zeit lang nicht bewegen kann, weil er sich erholen muss.

    Darkness:
    Aktiviert die besondere Fähigkeit seines Schwertes und hüllt den Gegner in Schatten ein, die ihn seine Orientierung verlieren lassen und ihm langsam die Lebensgeister rauben.
    Erfordert im Moment ein Hohes Maß an Vorbereitung für Ashram, so dass er diese Fähigkeit im Kampf noch nicht 100%ig beherrschen kann.

    Aufruf:(Kurugane)
    Ruft Kurugane aus ihrer Rune, die durch den Blutpakt an Ashram gebunden ist, um ihn durch ein schwarzes Portal an einen anderen Ort auf Ardarn zu bringen.

    Bild
    Magiekenntnis

    Bild
    Waffenerfahrung
    Beherrscht die sowohl Einhand- als auch Zweihandwaffen und entlockt ihnen ihr volles Potential.

    Bild
    Begleiter
    Die Dämonin Kurugane begleitet Ashram und verlangt für ihre Dienste jedes mal einiges vom Lebenssaft Ashrams.



    Hintergrundgeschichte:
    Vor nun mehr 48 Vollmonden, in jener Nacht des großen Unwetters, sah man an der Küste des Westmeeres ein kleines Boot, wie es gepeitscht von Wellen, Sturm und Regen, gegen die scharfen Felsen der Küste geschmettert wurde. Am nächsten Tag begab es sich, dass eine Patrouille der Brecher, unter ihrem damaligen Hauptmann, die Küste entlangzog, auf der Sucher nach einem Magier.
    Sie fanden zwar nicht den Magier, den sie suchten, doch dafür die Trümmer eines Bootes und in ihnen einen jungen Mann, gekleidet in einer ihnen fremden Rüstung und bewaffnet mit einem gewaltigen Schwert. Der Mann war bewusstlos und der Hauptmann entschied sich, ihn mit in das Hauptquartier des Brecherordens zu nehmen um ihn dort zu befragen.
    Wie sich später herausstellte, besaß der Jüngling jedoch nur noch sehr bruchstückhafte Erinnerungen und so blieb seine Herkunft und der Grund für seine Anwesenheit hier ein Rätsel. Man beschloss, ihn unter Beobachtung zu halten.
    Während eines Trainingsduells der Ritter des Brecher-Ordens, begab es sich, dass Ashram - so hatte man ihn genannt, denn dies war der Name auf dem Siegelring, den er trug - herausgefordert wurde, zumal sich Gerüchte wegen seines plötzlichen Auftauchens und seiner ungewöhnlichen Rüstung breit machten. In dieses Duell, dem der Hauptmann beiwohnte, zeigte sich, dass Ashram sehr wohl in der Lage war, seine schwere Waffe, die mit ihm an Land gespült worden war, zu beherrschen.
    Leider mangelte es ihm an Teamgeist und Zugehörigkeitsgefühl. Niemand wollte etwas mit dem Fremden, der sich so verschlossen zeigte, zu tun haben und trotz der Bemühungen des Hauptmanns, der Ashrams Potential erkannte, wurde seine Aufnahme in den Heiligen Orden der Brecher nicht zugestimmt. Jedoch räumte man ihm eine andere Möglichkeit ein: von Zeit zu Zeit kam es vor, dass man Magier an Orten jagen und ausschalten musste, an denen die Brecher nicht offen, ohne politische Konsequenzen zu fürchten, operieren konnten. Dafür heuerte man dann Söldner an, die niemand zuordnen konnte oder niemand vermissen würde.
    Ashram willigte ein und wurde wie man es nannte "Freier Ritter". Doch seine Taten sollten ihm bald unter den Magiern den Namen "schwarzer Schrecken" verleihen. Auch unter den Söldnern, die öfters Aufgaben der Brecher an nahmen, wagte es niemand mehr mit ihm auf Reisen zu gehen, oder Aufgaben zu erfüllen. Es kam immer wieder zu mysteriösen Todesfällen unter seinen Begleitern und man sagte ihm nach, er habe sie getötet, weil sie ihn bei der Jagd auf seine Beute behinderten.
    Von einem seiner Aufträge brachte er nicht nur den Kopf eines Magiers mit, er weigerte sich seinen Lohn anzunehmen und stattdessen wollte er die Rune behalten, die er bei dem Magier gefunden hatte. Im Normalfalle wäre dies nicht möglich gewesen, denn alle Habseligkeiten einen Magiers werden konfisziert oder vernichtet, jedoch maß man einem wertlosen Stück Stein - kein Magiekundiger konnte die Rune zuweisen- keine größere Bedeutung zu.
    Ashram jedoch erkannte, dass die Schriftzeichen seines Schwertes und die der Rune, die gleichen waren; sie waren fremd und doch vertraut.
    In jener Mondlosen Nacht, auf einem Hügel in der Nähe des Roten Turms, rief Ashram die Dämonin darin zum ersten Mal und besiegelte den Pakt des Blutes mit ihr, in der Hoffnung, eines Tages herauszufinden, wo er her kam, warum er die Runen und ihre Macht verstand und was ihn auf diesen von Gott verlassenen Kontinent getrieben hatte.



    -Start-


    Startort: Hauptquartier der Brecher
    Startpost:

    Rüstung: Schwere Plattenrüstung, mit Schwertbrechern an Schulter und Hals. Dazu Plattenstiefel und Handschuhe. Schwarzer Umhang, mit von Innen mit roten Samt ausgekleidet. Trägt die Scheide für sein Zweihandschwert links am Gürtel. Kuruganes Rune ist an einer untrennbaren Kette um seinen Hals gebunden, die sich erst löst, wenn der Pakt der beiden beendet ist

    Inventar:
    Rucksack (6)
    • 2 x Proviant
    • Verbandsmaterial
    • Zunderzeug
    • Messer

    Geld: 30 Kupfer
  • Zitate

    [ spoiler ](01:12:02) Nariakei: ich schreib nich gross x.x

    (01:12:09) Nariakei: du weisst ja, ich mags klein :<



    (01:14:09) Nariakei: v.v hallu mein name is cedric, ich bin 17 jahre alt und stehe auf kleine mädels :< lool

    (01:14:13) Fail: muss er dich wohl bannen, sonst gibt es nur streit :<

    (01:14:37) Nariakei: wtf v.v

    (01:14:46) Nariakei: ich sag do nich einfa wi ich heiss oda wi alt ich bin
    [ /spoiler ]

    [ spoiler ]Epics Geilste Sprüche:



    (00:00:07) epic: hrrr

    (00:00:14) epic reibt sich die nippel



    (03:04:59) epic: (03:02:51) epic: ich bin absolut grundlos gluecklich

    (03:02:55) epic: weil ist halt so

    (03:03:11) epic: und reden kann ich ab nu nicht mehr

    (03:03:20) epic: weil meine mum hat mir grade den stinkefinger gezeigt[ /spoiler ]

    [ spoiler ]
    Sprach Talente
    (22:37:46) (Leonheart): Kenshi fast jeder hat hier schon mit dem rmxp gearbeitet einige arbeiten jetzt ohne maker sondern scripten selber
    (22:37:49) agenty: meine klassik-gitarre is n billig-teil XD
    (22:38:03) Kenshi_Player: cool ich auch!!
    ((22:38:39) (Leonheart): welche sprache nutzt du kenshi
    ((22:38:53) Kenshi_Player: wie meinßt du des??
    (22:39:08) (Leonheart): zum programmieren du sagtest du scriptest auch
    (22:39:24) Kenshi_Player: ja ich benutze Englisch!![ /spoiler ]
zum Lesen den Text mit der Maus markieren

11

Freitag, 3. Juli 2009, 23:52

Nix gegen TS aber da im Moment auch das Mikro meines Vaters am A**** ist und ich immer noch kein eigenes hab (außer dem, welches bei besagten Nächten versehentlich vernichtet wurde xD), und da ich selbst am Wochenende nicht mehr so viel Zeit online verbringe, sprechen wohl die Umstände dagegen xD

Aber ich hab mich mittlerweile mit dem Compiler der bei Blocks dabei ist schon angefreundet. Nur der vollständigkeit halber: Borland geht immer noch nicht, für alle die es mit Borland versuchen wollen!

Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

12

Mittwoch, 29. Juli 2009, 16:47

Erstmal, geiles Tut^^, hat mir sehr geholfen.

Doch jetzt hätte ich da direkt mal ne Frage zu. Kann sein dass ich es überlesen habe, aber wieso werden die Parameter in nem String überliefert? Ich meine das sind ja alles nur zahlen und man kann doch (Hash ausgenommen) keinem String eine Zahl zu weisen...
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

13

Mittwoch, 29. Juli 2009, 19:50

Der C Klasse "addieren" werden ganz normale Integer übergeben...

Meinst du die 'i' im WinApi aufruf oder was? Das sind nur Platzhalter für die Anzahl und Art der Werte. 'i' steht dabei für Integer.
Falls du das nicht meintest, erkläre nochmal genauer was du meinst.

Evrey

Oberschurke im Ruhestand

Motto: "Satzzeichen sind keine Rudeltiere." - Chesra

  • Nachricht senden

14

Sonntag, 2. August 2009, 18:39

Hindi, ein String ist in C und C++ nicht das selbe wie die Klasse String in Ruby/Java/C++!
Ein String ist streng genommen nur ein Array aus Bytes. Und eine Zahl zu 'nem String zu machen ist dämlich einfach. In Ruby würde man sagen Numeric.to_s(), aber in C & Co. läuft das meine ich so, dass die Zahlen einfach in ihre Bytes zerlegt werden. Ein short int hätte also 2Bytes.

Zitat

Ich meine das sind ja alles nur zahlen
Für den Computer sind alles Zahlen. Schonmal bemerkt, dass die ASCII/ANSI/Unicode-Tabellen einer Zahl ein Zeichen zuweisen?
  • :medal: Werbung

    Bild

    Cpp Quellcode

    1
    
    #define TRUE FALSE //Happy debugging suckers
    (Einfach nur wundervoll.)
  • :palette: 1plus3 :cake:

    Bild
  • :fires: Nuuuhminaaah

    Bild
  • :medal: compétences

    mes compétences
    :heart_full: :heart_full: :heart_full: :heart_full: :heart_full: max.
    :ruler-triangle: Maps machen :heart_full: :heart-empty: :heart-empty: :heart-empty: :heart-empty:
    :media-player: Musik machen :heart_full: :heart-half: :heart-empty: :heart-empty: :heart-empty:
    :cup: Scripts machen :heart_full: :heart_full: :heart_full: :heart_full: :heart-break:
    :paper: Story ausdenken :heart_full: :heart_full: :heart_full: :heart-empty: :heart-empty:
    :cut: Pixeln und so :heart-empty: :heart-empty: :heart-empty: :heart-empty: :heart-empty:
    :game: Events proggen :heart_full: :heart_full: :heart_full: :heart_full: :heart_full:
    (Dieser Tab ist rein satirisch.)
  • :folder-open: mes projets

    • :addressbook: Silentium
      :book: Name: Silentium
      :rmxp: Maker: Eigenbau (C++, x86-SSE/AVX-Assembly, Ruby/Lua)

      :paper: Story
      :game: NPCs
      :cup: Scripts
      :drill: Ressis
      :ruler-triangle: Maps
      :compile: Gesamt
      (3+4)% 42 69% 0815 -17.438 103.38% ± 6.3mm²

      (Die Tabelle erfüllt lediglich satirische Zwecke.)
    • :compile: Onyx
      Eine in C++ implementierte, modulare, plattformunabhängige, virtuelle Maschine. Die Test-Version ist bereits halb fertig. Ab dann gibt es vielleicht mehr Infos. Sie soll die auf dem ersten Blick LISP-artige und eigens dafür konstruierte Sprache Obsidian ausführen können. Experimentell wird auch ein Lua-Compiler für Onyx gebaut. Ziel ist eine leistungsfähige, virtuelle Maschine für beliebige Scriptsprachen. Theoretisch gesehen müsste man bloß noch einen kompatiblen Compiler schreiben, der Quellcode jener Sprache in Onyx-Assembly, oder direkt in Onyx-Bytecode übersetzt. Ob die jemand nutzen wird, ist eine andere Frage und nur ein sekundäres... nein, eher tertiäres Ziel dieser VM. Primär dient es mir lediglich dazu, mein Verständnis von Hardware, ISA, und Assembly zu vertiefen, sowie eigene Grenzen auszutesten.

      :exclamation: Warnung!
      Das Entwickeln einer virtuellen Maschine oder Programmiersprache (im wahnsinnigsten Fall beides) ist eine höchst komplizierte Tätigkeit, aus der viel Frust und Hirnmatsche hervor gehen. Sollte sich dennoch ein ähnlich wahnsinniger finden, der sowas zusammen schustern will, so lege ich ihm/ihr die folgenden Bücher ans Herz:
      • Compiler - Das Drachenbuch [978-3-8273-7097-6]
        Dieses Buch schlachtet ausführlich und leicht verständlich die Grundlagen bis hoch zu den Experten-Techniken des Compilerbaus aus. Es fängt mit der Automaten-Theorie und formalen Sprachen an, arbeitet sich durch Analysetechniken vor, und landet schließlich bei Techniken wie Optimierung und Register-Zuweisung. Das Buch wiegt 3Kg oder 4Kg. Hab's mal gewogen. Ist also nicht gerade die Lektüre für unterwegs.

      • Computerarchitektur [3-8273-7016-7]
        Hier werden leicht verständlich die wichtigsten Entwicklungen der Rechnerarchitekturen erklärt (Gut, das Buch ist in die Jahre gekommen, aber der Weg zu heute ist ein winziger Schritt, den man sich nach diesem Buch selbst erdenken kann). Hauptbestandteil des Buchs ist eine relativ umfassende Betrachtung der Funktionsweise dreier gänzlich unterschiedlicher, aber dominierender Prozessor-Typen am Beispiel des Pentium II, UltraSPARC II, sowie picoJava. Die meisten Elemente dieses Buchs sind zwar für die Konstruktion einer virtuellen Maschine irrelevant, oder aufgrund der Tatsache, dass die VM Software ist und z.B. Byte-Grenzen hat, sogar zu Leistungseinbußen führen kann, doch ist ein hinreichendes Verständnis dieser Maschinen, mit denen wir arbeiten, äußerst hilfreich für die Überlegungen, wie die VM arbeiten soll.

      Es kann sehr hilfreich und inspirierend sein, den Code quelloffener, virtueller Maschinen anderer Sprachen zu überfliegen. Meine Lieblings-Quelle war und ist stets die VM von Lua. Sie ist schlank, verständlich, in C implementiert, und basiert im Gegensatz zu vielen anderen Scriptsprachen-VMs auf einer Register-Maschine statt einer Stapelmaschine. Es wäre natürlich vorteilhaft, die entsprechende Sprache zu verstehen, in der man auch die eigene VM implementieren will. Weiterhin ist es äußerst vorteilhaft, eine leistungsstarke und bequeme Sprache wie C++ zu beherrschen, um die VM zu implementieren. Und bevor irgendwer auf die Idee kommt: Assembly ist NICHT als dominierende Sprache für den Bau einer VM geeignet. Wer die Frage des "Warum?" nicht beantworten kann, sollte zunächst die gewählte Sprache und Assembly hinreichend verstehen lernen, und es dann erneut mit der Frage versuchen. Es lohnt sich dennoch, Assembly zu lernen. Allein schon, um erneut das Verständnis zu vertiefen, zumal ihr mehr oder weniger gezwungen seid, auch für eure VM eine Assembler-Sprache zu entwickeln (Außer natürlich ihr schreibt eure Test-Programme Bit für Bit ;3).
  • :locale: enfin

    Je ne peux pas parler français.
    C'est tout ce que Goodle et les restes de cours de français.
Signaturstand: 24.07.2013

15

Mittwoch, 12. August 2009, 01:11

hallo, ich wollte ein paar allgemeine Fragen zum Tutorial/dem Auslagern stellen.

also ist es generell effizienter algorithmen in dlls auszulagern und die ergebnisse per api wieder einzuführen?
bzw. ist es "merklich" effizienter? sprich: hat es Sinn?

ich bin zwar definitiv noch nicht soweit, da ich erstmal die RGSS sachen meistern sollte (bzw erst angefangen habe ;)), aber würde mich dann doch interessieren.. :)

Das Tutorial ist jedenfalls top - Interessant wäre vllt noch eine Anleitung für das Einrichten der C-Compiler/IDEs, kennt hier jemand etwas?
(auf Visual Studio würd ich gern verzichten, das is mir nicht ganz geheuer.. ;))

danke aufjedenfall schonmal,
greets Darky

16

Mittwoch, 12. August 2009, 12:06

Zitat

also ist es generell effizienter algorithmen in dlls auszulagern und die ergebnisse per api wieder einzuführen?
bzw. ist es "merklich" effizienter? sprich: hat es Sinn?

Ich kann da nicht aus Erfahrung sprechen, weil ich es noch nie gemessen habe, aber ich würde sagen nur manchmal. Ich denke das laden der DLL über die WinAPI und das umbiegen Rubys auf das C Interface machen den Performancevorteil Cs wieder weg, wenn es aber an spezielle Aufgaben geht, die entweder lang sind oder die in C gut optimiert werden können sieht das wieder anders aus.

Zitat

Das Tutorial ist jedenfalls top - Interessant wäre vllt noch eine Anleitung für das Einrichten der C-Compiler/IDEs, kennt hier jemand etwas?
(auf Visual Studio würd ich gern verzichten, das is mir nicht ganz geheuer.. )

Visual Studio kann dir ruhig geheuer sein, das ist die beste und weit verbreitetste IDE für C++. Für C sieht es wieder ein bisschen anders aus, Microsoft macht z.B. keine Anstalten C99 zu unterstützen, also würde ich zum GCC raten und als IDE kannst du dir mal Code::Blocks anschauen.

Naja, lern erstmal RGSS, normalerweise solltest du keine DLL brauchen.

17

Mittwoch, 12. August 2009, 23:05

hey, danke für die Antwort...
klingt einleuchtend :)

sollte ich mal auf ein Problem stoßen das merklich an der Performance zieht ist es zumindest einen Versuch zur Besserung wert...


Zitat


Visual Studio kann dir ruhig geheuer sein, das ist die beste und weit verbreitetste IDE für C++. Für C sieht es wieder ein bisschen anders aus, Microsoft macht z.B. keine Anstalten C99 zu unterstützen, also würde ich zum GCC raten und als IDE kannst du dir mal Code::Blocks anschauen.


Okay, C++ ist mir um einiges wichtiger.. von daher :)
Es ist nur so.. ich nutze bevorzugt offene Software, die ja Visual Studio nicht ist

18

Montag, 17. August 2009, 16:22

Es ist nur so.. ich nutze bevorzugt offene Software, die ja Visual Studio nicht ist


Also wenn du was ähnliches wie VS haben willst würde ich mir mal Eclipse ankuken. Da gibts auch eine Version speziell für c++, die wie ich mir hab sagen lassen gut sein soll. Ich hab das immer nur zum Java proggen benutzt und da fand ichs immer sehr komfortabel, aber auch ein Bischen groß und überladen.
Insgesammt finde ich persönlich allerdings immernoch die gute alte Text-Editor und Konsole Kombi am produktivsten, aber das ist wahrscheinlich Geschmackssache...

Social Bookmarks