DLL Topic Ufficiale Creazione & Commenti
- Sla
- GMI VIP
- Messaggi: 3618
- Iscritto il: 21/07/2008, 10:11
- Specialità: Titanismo
- Località: (gm) Italia
- Contatta:
Re: DLL Topic Ufficiale Creazione & Commenti
se una dll è fatta per gm sicuramente trovi un help o una descrizione da qualche parte che ti dice come usarla.
eppure mi sembra tutto giusto...
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: DLL Topic Ufficiale Creazione & Commenti
Tre parole... SEI GRANDE MAZ! Un dubbio però, posso creare ds in c++(studio c da poco, so qualche base)? E come si fa a usare altre dll da questa dll(es:U3D)? La mia idea è quella di ampliare come possibilità le particelle in U3D (anche mesh e non solo billboard per esempio). Ci sono riuscito con gm ma è estremamente lento (troppe informazioni ed elaborazioni) quindi volevo farlo in c/c++. Mi date una mano?
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
- BaronVsCorsar
- GMI VIP
- Messaggi: 4699
- Iscritto il: 14/02/2004, 12:05
- Specialità: Saccenza
- Uso: GameMaker 8.1
- Località: Ferrara
- Contatta:
Re: DLL Topic Ufficiale Creazione & Commenti
una domanda piuttosto banale... se una dll è pensata per il C++, e ha alcune funzioni che richiedono un puntatore a variabile come parametro (verosimilmente modificherà direttamente il valore della variabile) questa
dll non posso usarla in GM, giusto?
suppongo che dovrei ricreare la dll aggirando in qualche modo il problema creando "funzioni interfaccia" adeguate a gml...
è giusto, o c'è qualche trucco più semplice?
dll non posso usarla in GM, giusto?
suppongo che dovrei ricreare la dll aggirando in qualche modo il problema creando "funzioni interfaccia" adeguate a gml...
è giusto, o c'è qualche trucco più semplice?
Schiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
- maz85
- Admin
- Messaggi: 8287
- Iscritto il: 07/02/2004, 15:57
- Specialità: Nientologo
- Località: Oblio
- Contatta:
Re: DLL Topic Ufficiale Creazione & Commenti
Non ho mai provato (semmai dopo faccio una prova), ma suppongo non ci siano problemi se queste funzioni sono private cioè lavorano tra di loro, mentre le pubbliche si interfacciano con GM perchè non saprei come passare un puntatore da GM alla dll se non giocando con qualche casting...(quindi non penso prenda la variabile come puntatore).
Per il discorso di interfaccia:
Dll come ultimate3d penso facciano largo uso di puntatori ecc... passando solo double.
Spero di non aver scritto cazzate, si necessita di provare sul compilatore. (aka se ho cantonato correggetemi)
@Jak: in una dll puoi richiamare un'altra dll, ma a questo punto fai prima su Gm ad utilizzare 2 dll (ultimate3d+la tua).
Per il discorso di interfaccia:
Codice: Seleziona tutto
int prendopuntatoreeloelaboro(int *ptr)
{
//funziona interna
//eseguo operazioni
}
Codice: Seleziona tutto
export double funzionerichiamatasugm(double var)
{
//funzione pubblica
int *ciao;
ciao=&var;
prendopuntatoreeloelaboro(ciao);
}
Spero di non aver scritto cazzate, si necessita di provare sul compilatore. (aka se ho cantonato correggetemi)
@Jak: in una dll puoi richiamare un'altra dll, ma a questo punto fai prima su Gm ad utilizzare 2 dll (ultimate3d+la tua).
Votate GmItalia nella classifica!
Ultime dal fronte.... notizie e altro sul sito di GmItalia
°Pagina personale: % di sviluppo giochi e altro°
Ultime dal fronte.... notizie e altro sul sito di GmItalia
°Pagina personale: % di sviluppo giochi e altro°
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: DLL Topic Ufficiale Creazione & Commenti
Ci avevo già rinunciato da un pezzo per via del fatto che con tutto il lavoro che dovrei fare diventa complicatissimo e più lento di gm. Comunque guarda la data del mio post.maz85 ha scritto:@Jak: in una dll puoi richiamare un'altra dll, ma a questo punto fai prima su Gm ad utilizzare 2 dll (ultimate3d+la tua).
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
- BaronVsCorsar
- GMI VIP
- Messaggi: 4699
- Iscritto il: 14/02/2004, 12:05
- Specialità: Saccenza
- Uso: GameMaker 8.1
- Località: Ferrara
- Contatta:
Re: DLL Topic Ufficiale Creazione & Commenti
Non mi pare che così funzioni...maz85 ha scritto:Spoiler
Facendo in quel modo io passo l'indirizzo della variabile locale della funzione funzionerichiamatasugm, non del parametro che passo a gm.
Essendo "var" definita come double questa ha un indirizzo nello stack delle chiamate a funzioni, gli si assegna il valore passato alla chiamata della funzione (quindi da GM), ma quando uso l'operatore indirizzo &var passo l'indirizzo della variabile sullo STACK, non di gm!
Ovvio che poi funziona tutto (cioè non ricevo errori), ma la variabile di GM non viene modificata.
...
a meno di fare (in GM)
variabile = funzionerichiamatasugm(variabile)
e in C++ modificare la funzione in
export double funzionerichiamatasugm(double var)
{
//funzione pubblica
int *ciao; //int o quello che serve ovviamente!)
ciao=&var;
prendopuntatoreeloelaboro(ciao);
return (*ciao);
}
Uhm... sì insomma, è possibile, ma servono i sorgenti della DLL, un discreto numero di funzioni di interfaccia e una bella ripassata del dettaglio di tutte le funzioni della dll per essere sicuro di non sbagliare.
Magari è più semplice fare un DLL che chiama le funzioni dell'altra DLL (fatta per il C++)per poter copiare facilmente le nuove versioni della DLL C++...
uhm... più lavoro di quanto speravo E non ho neppure mai compilato una dll in vita mia... bene! altro da imparare
Schiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?
- guidox
- GMI Honor
- Messaggi: 5765
- Iscritto il: 26/07/2009, 17:23
- Specialità: programmazione
- Uso: GM:Studio 1.4 Android
- Località: Marche
- Contatta:
Re: DLL Topic Ufficiale Creazione & Commenti
Grazie Maz è da un po che smanetto con il c++ ed ho trovato il tuo tutorial molto interessante.
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: DLL Topic Ufficiale Creazione & Commenti
Mi sono messo da un po a studiare il c++ tramite un(bellissimo) libro consigliatomi da sla.
Non sono ancora ad un livello decente per fare qualcosa ma volevo mettere in pratica ciò che facevo facendo qualche dll per imparare(il mio obiettivo che penso, ora come ora, di poter raggiungere tranquillamente è quello di fare una dll per il metodo della diffusione di homu che a mio parere è forse un po più lento e richiede più risorse ma ha molte più potenzialità per una eventuale IA)
Ho fatto una semplice dll che sfrutta la memoria dinamica, a me funziona perfettamente ma giusto per curiosità l'ho fatta provare a nocche al quale però non andava(diceva mancava una dll di windows), ho quindi provato ad usare vs 2008 e anche con quello, seppur con un'errore diverso, a me andava ed a lui no.
Volevo quidni sapere se era un caso mio che va o un caso suo che non va oppure se cè qualche errore strano che non permette il funzionamento ad una certa gamma di pc.
Quindi ecco il file compresso dove troverete dll e gm81(forse dovevo farli in gmk ma chissà dove ho messo gm8.0) sia per vs2010 che per vs2008. Basterà far partire il gioco in teoria dovrebbe disegnare a schermo "37" sempre che non cambiate il valore nel create.
Se vedete che non va provate a fare qualche aggiornamento e a scaricare i redistributable:
http://www.microsoft.com/downloads/en/d ... laylang=en
http://www.microsoft.com/downloads/it-i ... 50143D5867
Sono per vs2010 per i x86 e 64 bit, credo che coprano pure quelli per vs2008 ma non ne sono sicuro.
Ditemi eventuali problemi e cose cosi.
Per fare la dll ho creato un nuovo progetto applicazione consolle e selezionato che fosse un progetto dll vuoto.
Il codice usato è motlo semplicemente questo:Come vedete non fa altro che creare, leggere e cancellare una variabile di tipo double, più di metà del codice alla fine son solo conversioni di tipo per far si che GM legga l'indirizzo alla variabile come un double, so che se un'utente mageggia a caso i valori potrebbe fare degli errori ma come ho detto è solo una prova.
Altra cosa che mi interesserebbe sapere è la compatibilità con i 64 bit, qualcuno sa cosa devo fare/evitare di fare perchè un programma sia compatibile anche con gli winzoz a 64 bit?
EDIT:altra cosa che non ho detto. Non ho idea di cosa cambi perchè son ancora inesperto ma ho lasciato il set di caratteri unicode. Potrebbe influenzare qualcosa? Ora sto facendo a provare a nocche con il multibyte...
EDIT2: ecco l'archivio con le nuove dll con set caratteri multibyte anche se non credo cambi nulla...
http://www.mediafire.com/?xq2twkfa1bsudab
EDIT3: ecco ho pure ridotto le conversioni di tipo in un'unica riga cosi da evitare l'uso di variabili temporanee(quindi più veloce) ed essere più leggibile:
Non sono ancora ad un livello decente per fare qualcosa ma volevo mettere in pratica ciò che facevo facendo qualche dll per imparare(il mio obiettivo che penso, ora come ora, di poter raggiungere tranquillamente è quello di fare una dll per il metodo della diffusione di homu che a mio parere è forse un po più lento e richiede più risorse ma ha molte più potenzialità per una eventuale IA)
Ho fatto una semplice dll che sfrutta la memoria dinamica, a me funziona perfettamente ma giusto per curiosità l'ho fatta provare a nocche al quale però non andava(diceva mancava una dll di windows), ho quindi provato ad usare vs 2008 e anche con quello, seppur con un'errore diverso, a me andava ed a lui no.
Volevo quidni sapere se era un caso mio che va o un caso suo che non va oppure se cè qualche errore strano che non permette il funzionamento ad una certa gamma di pc.
Quindi ecco il file compresso dove troverete dll e gm81(forse dovevo farli in gmk ma chissà dove ho messo gm8.0) sia per vs2010 che per vs2008. Basterà far partire il gioco in teoria dovrebbe disegnare a schermo "37" sempre che non cambiate il valore nel create.
Se vedete che non va provate a fare qualche aggiornamento e a scaricare i redistributable:
http://www.microsoft.com/downloads/en/d ... laylang=en
http://www.microsoft.com/downloads/it-i ... 50143D5867
Sono per vs2010 per i x86 e 64 bit, credo che coprano pure quelli per vs2008 ma non ne sono sicuro.
Ditemi eventuali problemi e cose cosi.
Per fare la dll ho creato un nuovo progetto applicazione consolle e selezionato che fosse un progetto dll vuoto.
Il codice usato è motlo semplicemente questo:
Codice: Seleziona tutto
#define export extern "C" __declspec( dllexport )
export double crea_variabile(double valore)
{
double* a = new double(valore);
int b= (int) a;
return (double) b;
}
export double leggi_variabile(double puntatore)
{
int a = (int) puntatore;
int* b = (int*) a;
double* punt = (double*) b;
return (double) *punt;
}
export double cancella_variabile(double puntatore)
{
int a = (int) puntatore;
int* b = (int*) a;
double* punt = (double*) b;
delete punt;
return 0;
}
Altra cosa che mi interesserebbe sapere è la compatibilità con i 64 bit, qualcuno sa cosa devo fare/evitare di fare perchè un programma sia compatibile anche con gli winzoz a 64 bit?
EDIT:altra cosa che non ho detto. Non ho idea di cosa cambi perchè son ancora inesperto ma ho lasciato il set di caratteri unicode. Potrebbe influenzare qualcosa? Ora sto facendo a provare a nocche con il multibyte...
EDIT2: ecco l'archivio con le nuove dll con set caratteri multibyte anche se non credo cambi nulla...
http://www.mediafire.com/?xq2twkfa1bsudab
EDIT3: ecco ho pure ridotto le conversioni di tipo in un'unica riga cosi da evitare l'uso di variabili temporanee(quindi più veloce) ed essere più leggibile:
Spoiler
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
- Sla
- GMI VIP
- Messaggi: 3618
- Iscritto il: 21/07/2008, 10:11
- Specialità: Titanismo
- Località: (gm) Italia
- Contatta:
Re: DLL Topic Ufficiale Creazione & Commenti
Nuova icona per gli stick! Ben fatto.
eppure mi sembra tutto giusto...
Re: DLL Topic Ufficiale Creazione & Commenti
ModestamenteSla ha scritto:Nuova icona per gli stick! Ben fatto.
Era necessario cambiare quella macchia sembrava "qualcosa di colore bianco" con un punto esclamativo in mezzo
Chi c’è in linea
Visitano il forum: Nessuno e 1 ospite