Bytez
Not logged in [Login ]
Go To Bottom

Printable Version  
Author: Subject: DLLi tegemise näide (C++)
Peeter1000
Junior Member
**


Avatar


Posts: 2
Registered: 9-7-2007
Location: Tartu
Member Is Offline

Mood: :D

[*] posted on 10-5-2009 at 19:20
DLLi tegemise näide (C++)


Enne kui alustame, mine tõmba endale C++ compiler, kui sul juba ei ole.

Ma kasutasin selleks Bloodshedi Dev-C++
See on tasuta C++ IDE mida saab tõmmata siit:
http://www.bloodshed.net/devcpp.html

Teine asi mida on vaja on Game Makeri registreeritud versioon (5, 6 või 7)
http://yoyogames.com


Nii, alustame.


Kõigepealt tee lahti C++ compiler, selle õpetuse jaoks soovitatavalt Dev-C++.

Tee uus DLL projekt ja vali keeleks C++ ja nimeks pane "Arvutamine".






Nüüd sinna tekkis 2 faili - dllmain.cpp ja dll.h. Nendest on vaja praegu ainult ühte - dllmain.cpp.
Kustuta dll.h fail ja seejärel kustuta kõik tekst dllmain.cpp failist ära.




Nüüd hakkame tegema DLLile sisu.


    #include <windows.h> // see on fail mis lisatakse DLLi sisse

    /* see rida on kõige tähtsam DLLis,
    sest ilma selleta ei saa Game Maker seda kasutada */
    #define dllfunction extern "C" __declspec (dllexport)


Siin tehakse esimene funktsioon DLLile

    /*
    siin tehakse dlli funktsioon
    */
    dllfunction double liida(double esimene, double teine) {

    double arv; //double on muutuja tüüp ja arv on muutuja
    arv = esimene + teine; //lihtne tehe

    return (double) arv; //tagastab tulemuse ja siis pärast game maker loeb seda arvu
    }


Edasi on sama, ainult teise tehte funktsioonid:


    dllfunction double lahuta(double esimene, double teine) {

    double arv;
    arv = esimene - teine;

    return (double) arv;
    }

    dllfunction double korruta(double esimene, double teine) {

    double arv;
    arv = esimene * teine;

    return (double) arv;
    }

    dllfunction double jaga(double esimene, double teine) {

    double arv;
    arv = esimene / teine;

    return (double) arv;
    }




Nüüd on vaja compileda DLL.
Selleks vali ülevalt "Execute" -> "Compile"




ja kui kõik läks nii nagu peab, siis näed sellist pilti:


Kui ei, siis sa oled teinud kuhugi vea sisse. Otsi üles ja paranda ära!

Nüüd on DLL valmis! Ava Game Maker.

Tee script nimega "Laadimine"

    var dllFail;
    dllFail = 'Arvutamine.dll'

    // laeb kõik funktsioonid mis DLLis on eraldi, et neid saaks eraldi kasutada
    global.liida = external_define(dllFail,'liida',dll_stdcall,ty_real,2,ty_real,ty_real);
    global.lahuta = external_define(dllFail,'lahuta',dll_stdcall,ty_real,2,ty_real,ty_real);
    global.korruta = external_define(dllFail,'korruta',dll_stdcall,ty_real,2,ty_real,ty_real);
    global.jaga = external_define(dllFail,'jaga',dll_stdcall,ty_real,2,ty_real,ty_real);



Siis tee ruum ja object. Paiguta object ruumi.
Objecti "Create" eventis on vaja laadida DLLi funktsioonid.
Seda teeb see script mille me just tegime.

Kirjuta see create eventisse:

    Laadimine();


Ja siis step eventisse:
Loe kommentaare, et teada saada mida need teevad.

    switch (keyboard_key)
    {
    case ord('1'):
    esimene_arv = get_integer('Esimene Arv:',""); //küsib esimest arvu
    teine_arv = get_integer('Teine Arv:',""); // küsib teist arvu

    // käivitab DLLi funktsiooni mille me enne laadisime, kahe argumendiga, esimene ja teine arv
    tulemus = external_call(global.liida,esimene_arv,teine_arv);

    show_message("Vastus on: "+string(tulemus)); //näitab tulemust

    break;

    // siit edasi on sama, ainult teise DLLi funktsiooniga, ehk teise tehtega sellel juhul
    case ord('2'):
    esimene_arv = get_integer('Esimene Arv:',"");
    teine_arv = get_integer('Teine Arv:',"");

    tulemus = external_call(global.lahuta,esimene_arv,teine_arv);

    show_message("Vastus on: "+string(tulemus));

    break;


    case ord('3'):
    esimene_arv = get_integer('Esimene Arv:',"");
    teine_arv = get_integer('Teine Arv:',"");

    tulemus = external_call(global.korruta,esimene_arv,teine_arv);

    show_message("Vastus on: "+string(tulemus));

    break;



    case ord('4'):
    esimene_arv = get_integer('Esimene Arv:',"");
    teine_arv = get_integer('Teine Arv:',"");

    tulemus = external_call(global.jaga,esimene_arv,teine_arv);

    show_message("Vastus on: "+string(tulemus));

    break;
    }



Ja siis lõpuks draw event:


    draw_set_halign(fa_center);
    draw_set_valign(fa_center);

    draw_text(room_width/2,room_height/2,
    "Vajuta nuppu <1> kui tahad liita.
    Vajuta nuppu <2> kui tahad lahutada.
    Vajuta nuppu <3> kui tahad korrutada.
    Vajuta nuppu <4> kui tahad jagada." );


Nüüd veel viimane asi - ära unusta paigutada DLLi mänguga samasse kausta. :)


Näide selle kõige kohta: http://peetertvauri.pri.ee/failid/game_maker/dll/DLL_N2ide.rar





PS: Kui tahate küsita midagi, või kuskil on viga, siis andke teada!
View user's profile View All Posts By User This user has MSN Messenger

  Go To Top

Powered by XMB 1.9.11
XMB Forum Software © 2001-2009 The XMB Group