Slascio Icon DLL

Gex, Dll, DyLib, Js e ogni tipo di estensione per GameMaker
Rispondi
Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Slascio Icon DLL

Messaggio da Sla »

Ultimamente mi sono accorto che molti fanno domande sulle icone + gm.
Per ovviare al problemino delle icone ho fatto una dll che potrete usare per convertire immagini bmp in icone.
Avrei potuto fare un programmino ma ho pensato ad una dll cosi che l'utente possa creare icone anche durante il suo
gioco, fatene buon uso :D

funzione:
Prima di tutto richiamare lo script API_Init(), successivamente:
ImageToIcon("bmp fname", "output fname")

(Nell'archivio è presente anche un esempio .gmk e una immagine .bmp da usare come prova)
edit: Ero quasi sicuro che accettasse solo bitmap, ma avendo dimensionato una variabile come system.drawing.bitmap
probabilmente vb converte anche una immagine non bitmap che gli viene assegnata.
Fatto sta che ho provato anche nuovi formati e funziona (gif,jpg,png) ma probabilmente fa altrettanto anche con altri formati che non ho provato.

Per chi non avesse gm7 ecco gli script da mettere:
Funzioni Layer(per caricare una dll dotnet in gm)
Spoiler
layer_init

Codice: Seleziona tutto

var dll;
dll = 'gmdll.dll';
global.layerinit = external_define(dll,'Init',dll_cdecl,ty_real,1,ty_real);
global.layerdll = external_define(dll,'DLLVer',dll_cdecl,ty_string,0);
global.layerasetr = external_define(dll,'SetArgumentReal',dll_cdecl,ty_real,1,ty_real);
global.layerasets = external_define(dll,'SetArgumentString',dll_cdecl,ty_real,1,ty_string);
global.layeraclear = external_define(dll,'ClearArguments',dll_cdecl,ty_real,0);
global.layerfuncr = external_define(dll,'FuncReal',dll_cdecl,ty_real,2,ty_real,ty_string);
global.layerfuncs = external_define(dll,'FuncString',dll_cdecl,ty_string,2,ty_real,ty_string);
global.layerldll = external_define(dll,'LoadDll',dll_cdecl,ty_real,1,ty_string);

global.layerlast = external_define(dll,'LastError',dll_cdecl,ty_string,0);
global.layercreate = external_define(dll,'CreateInstance',dll_cdecl,ty_real,2,ty_real,ty_string);

if (external_call(global.layerdll) != "1.0 BETA")
{
    show_error("LAYER VERSION MISMATCH!",true);
}
if (!external_call(global.layerinit,1))
{
    show_error("LAYER INIT FAILED!",true);
}
layer_loaddll

Codice: Seleziona tutto

// argument0: filename
// returns: dll_handle
return external_call(global.layerldll,argument0);
layer_function

Codice: Seleziona tutto

//argument0: instance_handle
//argument1: function_name
//argument2: returntype (ty_real / ty_string)
//argument3: argumentcount (max 8!)
//argument4-11: arguments

var i, r;
external_call(global.layeraclear);
for (i = 0; i < argument3; i+=1)
{
    if (is_string(argument[i+4]))
    {
        external_call(global.layerasets,argument[i+4]);
    }
    else
    {
        external_call(global.layerasetr,argument[i+4]);
    }
}
if (argument2 == ty_string)
{
    r = external_call(global.layerfuncs,argument0,argument1);
}
else
{
    r = external_call(global.layerfuncr,argument0,argument1);
}
external_call(global.layeraclear);
return r;
layer_createinstance

Codice: Seleziona tutto

//argument0: dll_handle
//argument1: class name
//argument2: argumentcount (max 8!)
//argument3-10: arguments
//returns: instance_handle
var i, r;
external_call(global.layeraclear);
for (i = 0; i < argument2; i+=1)
{
    if (is_string(argument[i+3]))
    {
        external_call(global.layerasets,argument[i+3]);
    }
    else
    {
        external_call(global.layerasetr,argument[i+3]);
    }
}
r = external_call(global.layercreate,argument0,argument1);
external_call(global.layeraclear);
return r;
Script della mia dll
Spoiler
API_Init

Codice: Seleziona tutto

layer_init();
dll = layer_loaddll("Slascio bmp-ico.dll");
global.Class1 = layer_createinstance(dll,"ClassLibrary1.Class1",0)
ImageToIcon

Codice: Seleziona tutto

layer_function(global.Class1,"Convert_BitmapToIcon",ty_real,2,argument0,argument1)
Allegati

[L’estensione zip è stata disattivata e non può essere visualizzata.]

eppure mi sembra tutto giusto...

Avatar utente
maz85
Admin
Messaggi: 8287
Iscritto il: 07/02/2004, 15:57
Specialità: Nientologo
Località: Oblio
Contatta:

Re: Slascio Icon DLL

Messaggio da maz85 »

Provato e funziona.
Hai voglia di fare un tutorial per dll in VB.net?

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: Slascio Icon DLL

Messaggio da Sla »

:rockrock: ok ho aggiunto un nuvo impegno nella mia agenda mentale stracolma.
Diamine!!! Sono indietro con tutto! compreso il progetto delle icone,sse2,un altro tut che volevo fare..
Vabbè ora mi do una regolata abbandonando qualche vecchio gioco che avevo in mente di continuare
e vedo di portare a termine tutti gli impegni recenti che mi sono prefissato :)
Grazie per aver provato :cappa:
eppure mi sembra tutto giusto...

Avatar utente
maz85
Admin
Messaggi: 8287
Iscritto il: 07/02/2004, 15:57
Specialità: Nientologo
Località: Oblio
Contatta:

Re: Slascio Icon DLL

Messaggio da maz85 »

Non abbandonarli, fai come me: rimandali a tempo indeterminato!! :lol:

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: Slascio Icon DLL

Messaggio da Sla »

:lol: li rimando con debito :)
Ho fatto il tutorial, lo metto sul topic apposito
eppure mi sembra tutto giusto...

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 27 ospiti