Gamestudio Links
Zorro Links
Newest Posts
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/22/24 13:41
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
0 registered members (), 984 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
LucasJoshua, Baklazhan, Hanky27, firatv, wandaluciaia
19053 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Konvertierung C-Script -> DLL #167627
11/15/07 19:45
11/15/07 19:45
Joined: Oct 2002
Posts: 4,753
Munich, Bavaria, South of Germ...
TripleX Offline OP
Expert
TripleX  Offline OP
Expert

Joined: Oct 2002
Posts: 4,753
Munich, Bavaria, South of Germ...
Hallo,

Ich konvertiere gerade auf ihren Rat zur kompletten "Vollendung" von GameEdit, das Projekt größtenteils in eine DLL (zumindest mindestens 75% des Codes).
Hierbei stoße ich öfter auf Probleme wobei ich jetzt hier 6 Fragen habe wie man vll. geschickter Arbeiten kann.

  • Kann ich irgendwie automatisches casten von Zahlen zu _VAR aktivieren? Eine große Fehlerquelle beim Konvertieren ist im Moment, dass ich Code wie:
    var GEdit_a = 0; Gedit_a += 1;
    spontan nicht verändere. Dabei muss ich schreiben GEdit_a += _VAR(1). Das gleiche andersrum: (txt->pstring)[GEdit_a] = chr - Dabei muss es (txt->pstring)[_INT(GEdit_a)] heißen.
    EDIT: Zumindest eine Warnung wie "Hier wird int zu var konvertiert" wäre nützlich. Kann man das VC++ beibringen?

  • Nächstes Problem: String Funktionen akzeptieren in einer DLL nur char* als zweites Paramter. Dauerhaftes aufrufen der Funktion _chr() entfinde ich als störend im Code und sicher auch nicht als sonderlich schnell. Kann ich gefahrenlos unter jeder Funktion die in der afuncs.h definiert ist, eine zweite Funktion schreiben die 2 Strings annimmt? Beispiel:
    Code:

    EXT var F(str_cmpi)(STRING*,char*);
    EXT var F(str_cmpi)(STRING*,STRING*);



  • Ich konvertiere Funktion für Funktion (nicht alles auf einmal). Daraus ergibt sich natürlich das Problem, dass Funktionen evtl. noch nicht definiert sind. So lange diese Funktionen noch nicht definiert sind löse ich es wie folgt:
    Code:

    #define GEdit_useroutput(a,b,c,d) engine_callname4("GEdit_useroutput",(long)a,(long)b,(long)c,(long)d)
    #define GEdit_update_interface2() engine_callname4("GEdit_update_interface2",(long)0,(long)0,(long)0,(long)0)


    Gibt es hier intelligentere / Schönere Lösungen? Leider können C-Script Funktionspointer ja nicht in einer DLL aufgerufen werden.


  • Leider kann in einer DLL kein wait benutzt werden. Wie würden sie daher Funktionen konvertieren in denen irgendwo ein wait(1) vorkommt? z.B. einfach nur ein simples: while(!mouse_left) { wait(1); } //next instructions.
    gibt ja schon schwere Probleme? Evtl. so:
    C-Script:
    Code:

    dllfunction name_dll(arg)
    function name()
    {
    name_dll(0);
    while(mouse_left) { wait(1); }
    name_dll(1);
    }


    DLL:
    Code:

    DLLFUNC var name_dll(var num)
    {
    if(_INT(num) ==0 ) //selbes prob. wie in 1) !!!
    {
    //erster teil der Funktion
    return 0;
    }
    if(_INT(num) == 1)
    {
    //zweiter teil der Funkion
    return _VAR(1);
    }
    return(_VAR(-1));
    }

    Oder gibt es auch hier eine elegantere Lösung?
  • Wie schnell arbeitet engine_getobj?
  • Dumme Frage vielleicht: Wie kann ich in DLL Funktionen eine DLLFUNC aufrufen? Oder ist das nicht möglich? (Nur über den umweg von engine_callname4?)



Vielen Dank für jede Hilfe,
mit freundlichen Grüßen,
Timo

PS: Die Fragen sind eigentlich an alle gerichtet, daher wer eine Antwort weiß.. Nur her damit

Re: Konvertierung C-Script -> DLL [Re: TripleX] #167628
11/19/07 08:48
11/19/07 08:48
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
- Casten von Zahlen zu var - gute Idee, habe ich nur aus Zeitgründen noch nicht gemacht. var ist typedef long. Besser wäre eine Klasse mit automatischer Konversion.

- Casten Sie Ihren String zu (char*). Das können Sie normalerweise nicht machen, aber da die Engine-Funktionen beides akzeptieren, ist das hier kein Problem.

- Wait ist ein nativer Bestandteil der Sprache und keine Funktion, die extern aufgerufen werden kann. In einer DLL-Funktion können Sie dafür einen Frame-Event benutzen. BTW, (VAR_(1) == num) ist besser und schneller als (1 == INT_(num)).

- engine_getobj gab's nur für C-Script - Sie meinen engine_getvar. Das ist eine langsame Funktion.

- Eine DLLFUNC ist eine ganz normale funktion und wird aufgerufen wie jede andere.


Moderated by  old_bill, Tobias 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1